使用python

时间:2015-12-09 17:58:36

标签: python arrays json

我正在使用JSON文件并使用Python。我正在尝试打印嵌套在数组中的对象。我想从以下数组打印选择对象(例如"名称"," thomas_id")(它被认为是'''对象& #39;在数组中?数组是否会被称为 "共同主体"数组?):

"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数据库,但这是另一个主题(或者它,即我是否以错误的方式进行此操作?)。因此,我正在编写一个代码,我可以在所有文件上实现,以获取我需要的数据。考虑到我没有任何编程经验,我一直表现得很好。我一直在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'])

它返回的结果是用空格分隔的。到目前为止,我很满意。

2 个答案:

答案 0 :(得分:1)

怎么样

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

由于列表包含数字索引。

答案 1 :(得分: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']列表中的每个对象。