循环遍历所有JSON孩子

时间:2017-03-28 15:45:13

标签: python

现在我有一个for循环,逐个查看键值==变量。

我正在逐一选择[0][1]索引来获取前两个孩子。 最多可能有四个孩子,有没有比elif 更有效的方法?

# INITIALIZE NEW FILTERED DICTIONARY (RETAINING TOP LEVEL ITEMS)
    newdata = OrderedDict({k:v for k,v in data.items() if k in ['stop_id', 'stop_name']})
    newdata['mode'] = []
    arrivalarray = []

    # ITERATE CONDITIONALLY KEEPING NEEDED SECTIONS
    for i in data['mode']:
        if i['route'][0]['route_name'] == line:
            if i['route'][0]['direction'][0]['direction_name'] == direction:
                for s in i['route'][0]['direction'][0]['trip']:
                    arrivalarray.append(s['pre_away'])
            elif i['route'][0]['direction'][1]['direction_name'] == direction:
                for s in i['route'][0]['direction'][1]['trip']:
                    arrivalarray.append(s['pre_away'])

2 个答案:

答案 0 :(得分:0)

加载JSON数据后,它不再是JSON数据。它只是一系列嵌套的Python列表,字符串,字符串等。因此,您可以执行您为任何Python数据结构所做的操作,例如使用for循环来迭代在列表的元素上:

for d in i['route'][0]['direction']:
    if d['direction_name'] == direction:
        for s in d['trip']:
            arrivalarray.append(s['pre_away'])

答案 1 :(得分:0)

是的,您可以使用递归而不是迭代,这实际上就是DFS

def traverse_json(json, depth): 
    if depth = 0 :
        return [];
    else:
        data = [];
        for i in json.keys():
             if isinstance(json[i], dict):
                  data += traverse_json(json[i], depth -1)
             else :
                  data.append(json[i])
        return data

您可以从您需要的最大深度开始。