使用python打印嵌套在数组中的json对象

Posted

技术标签:

【中文标题】使用python打印嵌套在数组中的json对象【英文标题】:print json object nested in an array using python 【发布时间】:2016-03-15 03:18:06 【问题描述】:

我正在处理 JSON 文件并且正在使用 Python。我正在尝试打印嵌套在数组中的对象。我想从以下数组中打印选择对象(例如“name”、“thomas_id”)(它是否被认为是数组中“对象”的“列表”?该数组是否被称为 the “共同发起人”数组?):

"cosponsors": [

  "district": null, 
  "name": "Akaka, Daniel K.", 
  "sponsored_at": "2011-01-25", 
  "state": "HI", 
  "thomas_id": "00007", 
  "title": "Sen", 
  "withdrawn_at": null
, 
.
.
.
  
  "district": null, 
  "name": "Lautenberg, Frank R.", 
  "sponsored_at": "2011-01-25", 
  "state": "NJ", 
  "thomas_id": "01381", 
  "title": "Sen", 
  "withdrawn_at": null

] 

问题是我不知道在数组中打印对象(列出的?)的语法。我已经尝试了从堆栈溢出中发现的一些变化;即,以下变体:

print(data['cosponsors']['0']['thomas_id']

我收到错误“列表索引必须是整数或切片,而不是 str”

背景:

我有超过 3000 个 json 文件,它们包含在所谓的主文件中。我只需要稍后导出到 mysql DB 中的每个文件的相同特定方面,但这是另一个主题(或者是它,即我是否以错误的方式处理这个问题?)。因此,我正在编写一个可以在所有文件上隐含的代码,以便获取我需要的数据。考虑到我没有任何编程经验,我一直做得很好。我一直在 Python 中使用以下代码:

import json

data = json.load(open('s2_data.json', 'r'))

print (data["official_title"], data["number"], data["introduced_at"], 
data["bill_id"], data['subjects_top_term'], data['subjects'], 
data['summary']['text'], data['sponsor']['thomas_id'], 
data['sponsor']['state'], data['sponsor']['name'],  data['sponsor'] 
['type'])

它一直在返回用空格分隔的结果。到目前为止,我对此感到满意。

【问题讨论】:

print(data['cosponsors'][0]['thomas_id'] - 注意 0,而不是“0” 【参考方案1】:

您正在使用字符串来索引列表,'0' 是字符串,而不是整数。删除引号:

print(data['cosponsors'][0]['thomas_id'])

如有疑问,请检查部分结果;看看print(type(data['cosponsors'])) 产生了什么;如果产生<type 'list'>,你知道你需要使用整数索引,如果你得到<type 'dict'>,使用键(可以通过在字典上调用print(list(...))来获得一个列表)等等。

通常,列表包含可变数量的对象;它可能只是一个,零个或整个负载。您可以在这些对象上循环

for cosponsor in data['cosponsors']:
    print(cosponsor['thomas_id'])

循环将cosponsor 逐一设置为data['cosponsors'] 列表中的每个对象。

【讨论】:

【参考方案2】:

怎么样

data['cosponsors'][0]['thomas_id']

因为列表具有数字索引。

【讨论】:

以上是关于使用python打印嵌套在数组中的json对象的主要内容,如果未能解决你的问题,请参考以下文章

无法从python中的json数组获取嵌套对象

python中如何遍历json数组

使用 C# 在复杂的 JSON 数组中查找和打印重复项

急! jquery $.each 嵌套循环遍历

vue.js - 使用原始 json 中的嵌套数组时,递归组件不会更新

对象遍历,多层嵌套数组,for in方法对象遍历,map方法数组遍历