从Json Python获取特定的字段值

时间:2018-11-16 06:39:09

标签: python arrays json list dictionary

我有一个JSON文件,而我想做的就是获取此特定字段'_id'。问题是,当我使用json.load('input_file')时,它说我的变量data是一个列表,而不是字典,因此我无法执行以下操作:

for value in data['_id']:
    print(data['_id'][i])

因为我不断收到此错误: TypeError:列表索引必须是整数或切片,而不是str

我也想做的是:

data = json.load(input_file)[0]

有点用。现在,我的类型是字典,我可以像这样访问:data['_id'] 但是我只能从档案中获取第一个“ _id” ...

所以,我想做的就是将所有'_id'的值添加到列表中,以备后用。

input_file = open('input_file.txt')
data = json.load(input_file)[0] 
print(data['_id'])# only shows me the first '_id' value

感谢您的帮助!

[{
 "_id": "5436e3abbae478396759f0cf",
 "name": "ISIC_0000000",
 "updated": "2015-02-23T02:48:17.495000+00:00"
},
{
 "_id": "5436e3acbae478396759f0d1",
 "name": "ISIC_0000001",
 "updated": "2015-02-23T02:48:27.455000+00:00"
},
{

 "_id": "5436e3acbae478396759f0d3",
 "name": "ISIC_0000002",
 "updated": "2015-02-23T02:48:37.249000+00:00"
},
{
 "_id": "5436e3acbae478396759f0d5",
 "name": "ISIC_0000003",
 "updated": "2015-02-23T02:48:46.021000+00:00"
 }]

3 个答案:

答案 0 :(得分:0)

您可以看到datalist的{​​{1}}

要遍历dictionaries,您需要使用以下代码

data

答案 1 :(得分:0)

  

它说我的变量数据是一个列表,而不是字典,所以我不能做类似的事情:

for value in data['_id']:
     print(data['_id'][i])

是的,但是您可以遍历列表中的所有字典并获取其'_id'键的值。可以使用list comprehension在一行中完成:

data = json.load(input_file)

ids = [value['_id'] for value in data]
print(ids)
  

['5436e3abbae478396759f0cf','5436e3acbae478396759f0d1','5436e3acbae478396759f0d3','5436e3acbae478396759f0d5']

另一种实现此目的的方法是使用python的map built-in函数:

ids = map(lambda value: value['_id'], data)

这将创建一个函数,该函数使用lambda expression从字典中返回键_id的值,然后返回一个列表,其中包含此函数的返回值应用于{{1}中的每个项目}

答案 2 :(得分:0)

您要打印json列表中每个元素的_id,所以我们只需遍历元素即可做到这一点:

input_file = open('input_file.txt')
data = json.load(input_file)  # get the data list
for element in data:  # iterate on each element of the list
    # element is a dict
    id = element['_id']  # get the id
    print(id)  # print it

如果要将元素列表转换为ID列表以供以后使用,则可以使用列表理解:

ids = [ e['_id'] for e in data ]  # get id from each element and create a list of them