Python - перебирать вложенный json и сохранять значения - PullRequest
0 голосов
/ 21 марта 2019

У меня есть вложенный веб-сайт JSON (API), который я хочу проанализировать и сохранить элементы в файл (используя Scrapy Framework).

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

0   {…}
1   {…}
2   {…}
3   {…}
4   {…}
5   {…}
6   {…}
7   {…}
8   {…}
9   {…}
10  {…}

Если я раскрываю элемент 0, я получаю следующие значения, где {...} расширяется дальше

id  6738
date    "2018-06-14T09:38:51"
date_gmt    "2018-06-14T09:38:51"
guid    
     rendered   "https:example.com"
modified    "2019-03-19T20:43:50"
modified_gmt    "2019-03-19T20:43:50"

Как это выглядит в реальности

Как последовательно получить доступ к каждому элементу, сначала 0, затем 1, затем 2 ... до общего значения 350 и получить значение, например,

guid   
    rendered "https//:example.com"

, и сохранить его вitem.

Что у меня есть:

       results = json.loads(response.body_as_unicode())
       item = DataItem()
       for var in results:
           item['guid'] = results["guid"]
       yield item

Это не с

TypeError: list indices must be integers, not str

Я знаю, что могу получить к нему доступ с

item['guid'] = results[0]["guid"]

Но это дает мне только [0] индекс всего списка, и я хочу перебрать все индексы.Как передать индексный номер внутри списка?

1 Ответ

1 голос
/ 21 марта 2019

Замените results["guid"] в вашем цикле for на var["guid"]:

for var in results:
    item['guid'] = var["guid"]
    # do whatever you want with item['guid'] here

, когда вы можете получить доступ к guid подобно results[0]["guid"], это означает, что у вас есть список словарей, каждый словарь которых содержит ключ с именемguid.в цикле for вы используете results (то есть список) вместо var (который содержит каждый словарь в каждой итерации), который выдает TypeError, потому что индексы списка должны быть целыми числами, а не строками (например, "guid").

ОБНОВЛЕНИЕ: если вы хотите сохранить каждый var["guid"], вы можете сохранить их в словаре, например так:

guid_holder = {"guid": []}
for var in results:
    guid_golder["guid].append(var["guid"])
for guid in guid_holder["guid"]:
    print(guid)

теперь guid_holder содержит все элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...