Python-迭代嵌套json并保存值
我有一个嵌套的JSON(API)webstie,我想解析它并将项目保存到文件中(使用Scrapy框架) 我想访问给定元素的每个子元素,这些子元素的格式如下Python-迭代嵌套json并保存值,python,json,scrapy,Python,Json,Scrapy,我有一个嵌套的JSON(API)webstie,我想解析它并将项目保存到文件中(使用Scrapy框架) 我想访问给定元素的每个子元素,这些子元素的格式如下 0 {…} 1 {…} 2 {…} 3 {…} 4 {…} 5 {…} 6 {…} 7 {…} 8 {…} 9 {…} 10 {…} 如果我展开元素0,我会得到以下值,其中{…}exapnds进一步 id 6738 date "2018-06-14T09:38:51" date_gmt
0 {…}
1 {…}
2 {…}
3 {…}
4 {…}
5 {…}
6 {…}
7 {…}
8 {…}
9 {…}
10 {…}
如果我展开元素0,我会得到以下值,其中{…}exapnds进一步
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"
并将其保存到项目
我所拥有的:
results = json.loads(response.body_as_unicode())
item = DataItem()
for var in results:
item['guid'] = results["guid"]
yield item
这与
TypeError:列表索引必须是整数,而不是str
我知道我可以使用
item['guid']=结果[0][“guid”]
但这只给了我整个列表的[0]索引,我想遍历所有索引。如何将列表中的索引号传递给var[“guid”]
将for循环中的结果[“guid”]
替换为var[“guid”]
:
当您可以访问guid
时,就像results[0][“guid”]
一样,这意味着您有一个字典列表,每个字典都包含名为guid
的键。在for循环中,您使用结果
(即列表),而不是抛出类型错误的var
(包含每个迭代中的每个字典),因为列表索引必须是整数而不是字符串(如“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\u holder
保存所有元素。但这只给了我整个列表的[0]索引,用一个uhm的东西替换0
怎么样?或者长度?发布一个结果的示例以获得即时帮助。我已经这样做了。它的行为古怪。仅给出第10个索引的一个结果results[0][“guid']
行为正确,为元素[0]打印guid
。results
使整个json网页保持可变,我也可以使用print(results)
打印它。我不知道如何迭代每个[0,1,2,3…]并获取每个项目的guid
。@Alex16237结果
具体包含哪些内容?请将其作为示例添加到您的问题中。我发布了一张图片(已编辑的帖子)。由于元素太多,因此无法正确设置格式。@Alex16237我更新了我的答案,请参阅“保存所有元素的更新”一节幸运的是,它不起作用。可能我的措辞不正确。如何将数组的变量/长度传递到循环内部的索引?我想这就是我解决此问题的方法,即。item['guid']=results[*][“guid”]
其中*
是循环传递的变量。结果
读取整个页面,如果我使用print
调用它,我将得到完整的JSON解析页面。
guid_holder = {"guid": []}
for var in results:
guid_golder["guid].append(var["guid"])
for guid in guid_holder["guid"]:
print(guid)