【问题标题】:For each "sub item" in json array, get name, then the value for a sub item对于 json 数组中的每个“子项”,获取名称,然后是子项的值
【发布时间】:2015-09-03 12:12:51
【问题描述】:

我为糟糕的标题道歉。我会尽量解释我想要达到的目标。

这是我的(示例)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”开头,但我想展示我到目前为止所做的尝试。

【问题讨论】:

  • 正如@wim 所说,出于礼貌,请提供有效的 JSON。您需要在每个最里面的值中删除 "7": ... 之后的逗号,并添加最后的结束 }
  • 已修复。感谢您指出这一点。

标签: python arrays json list


【解决方案1】:

这个解决方案的关键是将大的 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'])

【讨论】:

  • 这是完美的。谢谢!
【解决方案2】:

我会把你指向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' 的键价值部分。

【讨论】:

    猜你喜欢
    • 2020-05-06
    • 2015-01-25
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多