Получение определенных значений полей из Json Python - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть файл 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 голосов
/ 16 ноября 2018

он говорит, что мои переменные данные - это список, а не словарь, поэтому я не могу сделать что-то вроде:

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

Да, но вы можете перебрать все словари в вашем списке и получить значения для их ключей _id. Это можно сделать в одной строке, используя список понимания :

data = json.load(input_file)

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

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

Еще один способ добиться этого - использовать встроенную в карту функцию python:

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

Это создает функцию, которая возвращает значение ключа _id из словаря, используя лямбда-выражение , а затем возвращает список с возвращаемым значением из этой функции, примененным к каждому элементу в data

0 голосов
/ 16 ноября 2018

Вы хотите напечатать _id каждого элемента вашего списка json, поэтому давайте сделаем это, просто перебирая элементы:

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

Если вы хотите преобразовать список элементов в список идентификаторов для последующего использования, вы можете использовать понимание списка:

ids = [ e['_id'] for e in data ]  # get id from each element and create a list of them
0 голосов
/ 16 ноября 2018

Как видите, data является list из dictionaries

для зацикливания на data вам необходимо использовать следующий код

for each in data:
    print each['_id']
    print each['name']
    print each['updated']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...