繁体   English   中英

使用python将JSON转换为CSV

[英]Converting JSON into CSV using python

我有JSON数据:

u'{"result":[{"timestamp":1356843600000,"values":{"stream:sentimentNeutral":0}},{"timestamp":1356930000000,"values":{"stream:sentimentNeutral":15672}},{"timestamp":1357016400000,"values":{"stream:sentimentNeutral":13646}},{"timestamp":1357102800000,"values":{"stream:sentimentNeutral":14301}

现在,需要将其写入新的csv文件。 我得到了“响应”为JSON

response = requests.get(end_point,params=query_params);

# pprint.pprint(response.text)


data = json.loads(response.text)


f=csv.writer(open('test_1.csv','wb+'))

for item in data['result']:
 f.writerow(item['timestamp']['stream:sentimentNeutral'].values())

我得到这个错误

Traceback (most recent call last):
  File "G:\Python\codevOne.py", line 26, in <module>
    f.writerow(item['timestamp']['stream:sentimentNeutral'].values())
TypeError: 'long' object has no attribute '__getitem__'
>>> 

请更正我的错误。我觉得我正在努力遍历字典中的某个字典。 我期望的结果是一个名为“ test.csv”的文件,其中包含一个时间戳记行和相应的stream:sentimentNeutral

编辑:添加完整测试的源代码这可以完成这项工作(如果我正确理解了您想要的内容):

for item in data['result']:
  f.writerow((item['timestamp'], item['values']['stream:sentimentNeutral']))

它提供了一个由以下几行组成的csv文件timestamp, stream:sentimentNeutral

这是对您的数据的完整测试:

import pprint
import csv
import json

resp = u'{"result":[{"timestamp":1356843600000,"values":{"stream:sentimentNeutral":0}},{"timestamp":1356930000000,"values":{"stream:sentimentNeutral":15672}},{"timestamp":1357016400000,"values":{"stream:sentimentNeutral":13646}},{"timestamp":1357102800000,"values":{"stream:sentimentNeutral":14301}}]}'
data = json.loads(resp)
pprint.pprint(data)
with open('test_1.csv','wb+') as fd:
    f = csv.writer(fd)
    for item in data['result']:
        f.writerow((item['timestamp'], item['values']['stream:sentimentNeutral']))

pprint的输出是:

{u'result': [{u'timestamp': 1356843600000L,
              u'values': {u'stream:sentimentNeutral': 0}},
             {u'timestamp': 1356930000000L,
              u'values': {u'stream:sentimentNeutral': 15672}},
             {u'timestamp': 1357016400000L,
              u'values': {u'stream:sentimentNeutral': 13646}},
             {u'timestamp': 1357102800000L,
              u'values': {u'stream:sentimentNeutral': 14301}}]}

这是test_1.csv的内容

1356843600000,0
1356930000000,15672
1357016400000,13646
1357102800000,14301

因为在您的代码item['timestamp']是一个数字值,例如,在第一个循环中,所以它的值为1356843600000,而不是dict。

您应该使用:

for item in data['result']:
    timestamp = item['timestamp']
    value = item['values']['stream:sentimentNeutral']
    f.writerow([timestamp, value])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM