如何将Parsed JSON写入CSV fie?

时间:2017-04-07 11:58:14

标签: python json api csv parsing

注意:请查看已勾选答案的评论以获取解决方案:)

我正在写一些访问API的python,并将服务器的响应(JSON)导出到CSV文件。 JSON是嵌套的。

这是来自服务器的JSON响应(这只是响应的一个示例):

{  
   "id":182774,
   "website_id":307842,
   "engine_provider":"Google",
   "engine_name":"United Kingdom",
   "keywords":[  
      {  
         "id":4464443,
         "groups_id":[  
            44424
         ],
         "name":"SMART E70 Interactive Display",
         "positions":{  
            "2017-03-16":10
         }
      },
      {  
         "id":4464442,
         "groups_id":[  
            44424
         ],
         "name":"SMART Podium SP518",
         "positions":{  
            "2017-03-16":4
         }
      },
      {  
         "id":4464441,
         "groups_id":[  
            44424
         ],
         "name":"SMART Board M680",
         "positions":{  
            "2017-03-16":3
         }
      },
      {  
         "id":4464338,
         "groups_id":[  
            51168
         ],
         "name":"NEC Lamps",
         "positions":{  
            "2017-03-16":4
         }
      }
   ]
}

如果JSON看起来不对,可能是因为我在为这篇文章采样时编辑错了。

在Python中,我尝试解析查询响应,然后将嵌套字段写入CSV表,如下所示:

parsedqueryresponse = queryresponse.json()
f = csv.writer(open(csvoutputpath, "wb+"))
f.writerow(["name", "positions", "id"])
for parsedqueryresponse in parsedqueryresponse:
    f.writerow([parsedqueryresponse["keywords"]["name"],
               parsedqueryresponse["keywords"]["positions"],
               parsedqueryresponse["keywords"]["id"]])

当我运行脚本时,我收到此错误:

" 第146行,in     f.writerow([parsedqueryresponse ["关键字"] ["名称&#34], TypeError:字符串索引必须是整数"

第146行是这一行(也由错误消息引用):

f.writerow([parsedqueryresponse["keywords"]["name"]

我在这里做错了什么?我尝试更改JSON字段以使用'而不是"但这似乎没有让事情变得更好......

1 个答案:

答案 0 :(得分:1)

请试试这个,

import csv
import json

parsedqueryresponse = queryresponse.json()
f = csv.writer(open(csvoutputpath, "wb+"))
f.writerow(["name", "positions", "id"])
for entry in parsedqueryresponse["keywords"]:
    f.writerow([entry["name"],
               entry["positions"],
               entry["id"]])

<强>输出:

name,positions,id
SMART E70 Interactive Display,{2017-03-16: 10},4464443
SMART Podium SP518,{2017-03-16: 4},4464442
SMART Board M680,{2017-03-16: 3},4464441
NEC Lamps,{2017-03-16: 4},4464338

如有疑问,请随时告诉我。