对于每个"子项"在json数组中,获取名称,然后获取子项的值

时间:2015-06-18 02:22:01

标签: python arrays json list

我为糟糕的头衔道歉。我会尽力解释我想要达到的目标。

这是我的(例子)json:

{
"1": {
    "2": {
        "3": {
            "9": 10,
            "8": 11,
            "7": 12
        },
        "4": {
            "9": 13,
            "8": 14,
            "7": 15
        },
        "5": {
            "9": 16,
            "8": 17,
            "7": 18
        },
        "6": {
            "9": 19,
            "8": 20,
            "7": 21
            }
        }
    }
}

从这里开始,我将从" 2"开始,所以我做json.loads(array)['1']

现在我想得到每个名字(" 3"," 4"," 5"," 6")喜欢这样:

3
4
5
6

然后" 9"的价值:

3 (10)
4 (13)
5 (16)
6 (19)

" 9"的价值应该是一个单独的字符串,所以为了实现上述目的,我做了"%s (%s)" % (string, string2)

之类的事情。

现在我甚至不确定是否以" 2"是必要的,但我想展示我到目前为止所尝试的内容。

2 个答案:

答案 0 :(得分:0)

此解决方案的关键是将大型JSON块分解为更小的块。

import json
from pprint import pprint


text = '''{
"1": {
    "2": {
        "3": {"9": 10, "8": 11, "7": 12},
        "4": {"9": 13, "8": 14, "7": 15},
        "5": {"9": 16, "8": 17, "7": 18},
        "6": {"9": 19, "8": 20, "7": 21}
        }
    }
}
'''

block = json.loads(text)
block2 = block['1']['2']
for key, sub_block in block2.iteritems():
    print '%s (%s)' % (key, sub_block['9'])

答案 1 :(得分:0)

我指出你dict.items

y = json.loads(array)['1']['2']
list(map(lambda i: (i[0],i[1]['9']), y.items()))

这将返回一个键值对列表,您可以使用与您在问题中提出的内容类似的内容进行打印:

[('6', 19),('5',16),('3',10),('4',13)]

items做的是返回字典对象中的原始键值对列表(json.loads返回的内容),然后我通过map调用查找值部分的'9'键。