json剥离多个列表

时间:2017-07-29 21:10:16

标签: python json

我正在寻找有关此问题的更多信息。到目前为止,我已经检查了JSON编码/解码,但这并不是我想要的。

我正在寻找一种方法来轻松删除这种列表:

//response
{
  "age":[
    {"#":"1","age":10},
    {"#":"2","age":12},
    {"#":"3","age":16},
    {"#":"4","age":3}
  ],
  "age2":[
    {"#":"1","age":10},
    {"#":"2","age":12},
    {"#":"3","age":16},
    {"#":"4","age":3}
  ],
  "days_month":31,
  "year":2017
}

那么如何轻松提取数据呢?即我希望age2# = {3>的人的结果年龄。

要获得年/日_月的结果,我找到了google的解决方案:

j=json.loads(r.content)
print(j['year'])

检索数据。可能我在互联网上遗漏了某些东西,但我找不到这种情况的具体解决方案。

2 个答案:

答案 0 :(得分:0)

我认为这是@ Jean-FrançoisFabre试图表明的:

import json

response = """
    {
      "age":[
        {"#":"1","age":10},
        {"#":"2","age":12},
        {"#":"3","age":16},
        {"#":"4","age":3}
      ],
      "age2":[
        {"#":"1","age":10},
        {"#":"2","age":12},
        {"#":"3","age":16},
        {"#":"4","age":3}
      ],
      "days_month":31,
      "year":2017
    }
"""

j = json.loads(response)
# note that the [2] means the third element in the "age2" list-of-dicts
print(j['age2'][2]['#'])  # -> 3
print(j['age2'][2]['age'])  # -> 16

json.loads()将JSON格式的字符串转换为Python对象。特别是它将JSON对象转换为Python字典,将JSON列表转换为Python list对象。这意味着在这种情况下,您可以访问存储在变量j中的结果的内容,就像它是一个或多个这些类型的Python数据类型的原生混合一样(并且看起来非常类似于回复中显示的是什么。

答案 1 :(得分:0)

由于您要查找的搜索条件未包含在相应数据结构的索引中,因此我将使用列表解析来执行此操作。对于您的示例,这将是

[person['age'] for person in j['age2'] if person['#'] == u'3'][0]

这将遍历“age2”下列表中的所有项目,并将数字为“3”的所有项目放入列表中。 [0]选择列表的第一个条目。

然而,这是非常低效的。如果您有大型数据集,可能需要查看pandas

df = pandas.DataFrame(j['age2'])
df[df['#'] == '3']['age']

只要您的数据可以用一系列的系列或表格来表示,它就会更高效。