循环Json结构要获得多个输出,我得到一个,为什么?

时间:2017-12-06 02:16:21

标签: python json firebase

你好,我是json的新面孔,我想问一些关于它的事情,无论如何这里是我的代码:

for key in result1date.keys():
    key = sorted(result1date.keys())
    currentdate = key

    print currentdate

    result1 = firebase.get('/Rooms/Room1/' + currentdate + '/Inspection/Scan-in/Inspector/', None)
    result2 = firebase.get('/Rooms/Room1/' + currentdate + '/Inspection/Scan-out/Inspector/', None)
    print result1

    print currentdate

    for key in result1.keys():
         inspector = key
         timeout = result2[inspector]["Time"]

    # for key in result1date.keys():
    #    Date = key

    result1datetime = firebase.get('/Rooms/Room1/'+ currentdate +'/Inspection/Scan-in/Inspector/'+ inspector +'/', None)

    for key in result1datetime.keys():
        key = sorted(result1datetime.keys())[-2]
        time = key
        print time

     print time

     ch1 = result1datetime[time]["Checklist"]["Entrance louver clean and dust-free"]
     # ch2 = result1datetime[time]["Checklist"]["Room plate number – clean and well-polished"]
     ch3 = result1datetime[time]["Checklist"]["Appearance door surface- in good condition"]   
     # ch4 = result1datetime[time]["Checklist"]["Let the door close by itself to test the door closure – in working order"]
     ch5 = result1datetime[time]["Checklist"]["Eye viewer and fire escape plan in order"]
     ch6 = result1datetime[time]["Checklist"]["Privacy Sign or Make Up Room Sign"]
     # ch7 = result1datetime[time]["Checklist"]["Key card holder – in working order"]
     ch8 = result1datetime[time]["Checklist"]["Switches at the entrance working correctly"]

    #CLOSET
    #ch9 = result1datetime[time]["Checklist"]["Let the door close by itself to test the door closure – in working order"] 
     RESERVED FOR DOOR IN WORKING CONDITION
     ch10 = result1datetime[time]["Checklist"]["Lights in working order"] 

    # items below are sufficient
     ch11 = result1datetime[time]["Checklist"]["6 Hangers?"]
     ch12 = result1datetime[time]["Checklist"]["2 bathrobes?"]
     ch13 = result1datetime[time]["Checklist"]["2 pairs of slippers?"]
     ch14 = result1datetime[time]["Checklist"]["1 set of iron and board?"]
     ch15 = result1datetime[time]["Checklist"]["Elsafe open or working?"]
     ch16 = result1datetime[time]["Checklist"]["1 set of laundry list and bag?"]
     ch17 = result1datetime[time]["Checklist"]["1 extra pillow with pillow cover?"] 
     #ch18 = result1datetime[time]["Checklist"]["Luggage bench fabric top is clean"]#DINING DRESS CODE
     #ch19 = result1datetime[time]["Checklist"]["Luggage bench fabric top is clean"] #FLASHLIGHT

     #LUGGAGE AND LUNCH BREAK
      ch20 = result1datetime[time]["Checklist"]["Luggage  bench fabric top is clean"]
      # ch21 = result1datetime[time]["Checklist"]["Drawers – clean and dust-free"]

      #MINIBAR
      #ch22 = result1datetime[time]["Checklist"]["Luggage bench fabric top is clean"]#Arrangement of the items is neat & clean.
      #ch23 = result1datetime[time]["Checklist"]["Luggage bench fabric top is clean"]#Ensure the items below are sufficient
      ch24 = result1datetime[time]["Checklist"]["2 coke, 2  sprite, 1 C2 lemon, 1 C2 apple, 1 pineapple juice, 1 orange juice, 1 mineral water, 2 San Mig light, 2 pale pilsen?"]
      ch25 = result1datetime[time]["Checklist"]["1 pringles, 1 cashew nut, 1 cup noodles (placed in the coffee tray on the writing desk)?"]
      ch26 = result1datetime[time]["Checklist"]["Fridge is cold and clean"]

我有三个约会。 'currentdate'所以我遍布他们希望获得相同的输出,但其中三个具有不同的日期。这是我的firebase结构:

https://i.stack.imgur.com/DfYSP.png

但我只得到一个。当我使用代码的这一部分循环所有键时

 for key in result1date.keys():
     key = sorted(result1date.keys())

下面的内容应该遵循它。任何帮助表示赞赏。我想知道为什么会发生这种情况,希望是一个解决方案或建议。

我希望得到类似这样的输出:

[DATE 1 HERE with all the details within its branches]
[DATE 2 HERE with all the details within its branches]
[Date 3 HERE with all the details within its branches]

2 个答案:

答案 0 :(得分:1)

这看起来不对:

for key in result1datetime.keys():
    key = sorted(result1datetime.keys())[-2]
    time = key
    print time

您正在for循环中遍历您的密钥,但是您总是在下一行(sorted(result1datetime.keys())[-2])中获得相同的密钥。

为什么首先添加该行?这样,你总是得到中间键(三分之一)。

也许您想要对返回的密钥进行排序(key = sorted(key)[-2])。您的结构图像显示的深度不足以了解该级别的预期结果。

无论如何,我建议你不要在循环中重用key变量。这将使事情难以理解。请注意,问题是将其重置为您首先循环的相同迭代的固定元素。

答案 1 :(得分:0)

我对python或json并不熟悉所以这可能对你的情况不起作用,但我尽力建立这个,希望它可以提供一些帮助

如果Json文件具有固定的稳定结构,或者如果值的格式非常相似,我认为你可以这样做:

Json样本作为词典

firebase_json = {
"Rooms": {
    "Room1": {
        "2017-11-29": {
            "Status": ["unoccupied"],
            "Inspection": ["yes"],
            "Scan-in": ["no"],
            "Scan-out": ["yes"]
            },
        "2017-12-05": {
            "Status": ["occupied"],
            "Inspection": ["no"],
            "Scan-in": ["yes"],
            "Scan-out": ["no"]
        },
    },
    "Room2": {
        "2017-11-02": {
            "Status": ["unoccupied"],
            "Inspection": ["yes"],
            "Scan-in": ["no"],
            "Scan-out": ["yes"]
        },
        "2017-12-01": {
            "Status": ["occupied"],
            "Inspection": ["no"],
            "Scan-in": ["yes"],
            "Scan-out": ["no"]
        }
    }
}}

样本选择

room = input("Room?",)
for a in firebase_json:
    for b in firebase_json[a]:
        if b != room: #select by given room.
            continue
        print(b)
        for c in firebase_json[a][b]:
            print(" ", c) # if selection by date add previous != statement here
            for d in firebase_json[a][b][c]:
                for e in firebase_json[a][b][c][d]:
                    print("   ", d, ":", e)

正如我所说的那样,可能有更好的方法。