Python-遍历嵌套的json并保存值

时间:2019-03-21 14:32:35

标签: python json scrapy

我有一个嵌套的JSON(API)Webstie,我想解析该项目并将项目保存到文件中(使用Scrapy框架)。

我要访问给定元素的每个子元素,这些元素的格式如下

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"

How does it look like in reality

我要如何连续访问每个元素,首先是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: list indices must be integers, not str

我知道我可以使用

进行访问

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

但是,这只给了我整个列表的[0]索引,我想遍历所有索引。如何在列表中传递索引号?

1 个答案:

答案 0 :(得分:1)

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的{​​{1}}(即每次迭代中包含每个字典的TypeError),因为列表索引必须是整数而不是字符串(例如{ {1}})。

更新:如果要保存每个"guid",可以将其保存在这样的字典中:

var["guid"]

现在guid_holder = {"guid": []} for var in results: guid_golder["guid].append(var["guid"]) for guid in guid_holder["guid"]: print(guid) 拥有所有元素。