Python 如何将此json代码写入csv文件?
我从未使用过json,而且我几乎不是python用户,您如何将此json格式写入csv文件:Python 如何将此json代码写入csv文件?,python,json,csv,Python,Json,Csv,我从未使用过json,而且我几乎不是python用户,您如何将此json格式写入csv文件: { "meta": {}, "data": { "suggestionTitleAccessor": "symbol", "items": [ { "name": "Automatic Data Processing, Inc.", "exch": "NMS",
{
"meta": {},
"data": {
"suggestionTitleAccessor": "symbol",
"items": [
{
"name": "Automatic Data Processing, Inc.",
"exch": "NMS",
"type": "S",
"symbol": "ADP",
"exchDisp": "NASDAQ",
"typeDisp": "Equity"
},
{
"name": "Adeptus Health Inc.",
"exch": "NYQ",
"type": "S",
"symbol": "ADPT",
"exchDisp": "NYSE",
"typeDisp": "Equity"
},
{
"name": "ADP170217P00080000",
"exch": "OPR",
"type": "O",
"symbol": "ADP170217P00080000",
"exchDisp": "OPR",
"typeDisp": "Option"
},
{
"name": "Automatic Data Processing, Inc.",
"exch": "FRA",
"type": "S",
"symbol": "ADP.F",
"exchDisp": "Frankfurt",
"typeDisp": "Equity"
},
{
"name": "Adelphia Recovery Trust",
"exch": "PNK",
"type": "S",
"symbol": "ADPAJ",
"exchDisp": "OTC Markets",
"typeDisp": "Equity"
},
{
"name": "Adelphia Recovery Trust",
"exch": "PNK",
"type": "S",
"symbol": "ADPAS",
"exchDisp": "OTC Markets",
"typeDisp": "Equity"
},
{
"name": "AB Short Duration A",
"exch": "NAS",
"type": "M",
"symbol": "ADPAX",
"exchDisp": "NASDAQ",
"typeDisp": "Fund"
},
{
"name": "AB Short Duration B",
"exch": "NAS",
"type": "M",
"symbol": "ADPBX",
"exchDisp": "NASDAQ",
"typeDisp": "Fund"
},
{
"name": "AB Short Duration C",
"exch": "NAS",
"type": "M",
"symbol": "ADPCX",
"exchDisp": "NASDAQ",
"typeDisp": "Fund"
},
{
"name": "A\u00c3\u00a9roports de Paris S.A.",
"exch": "PAR",
"type": "S",
"symbol": "ADP.PA",
"exchDisp": "Paris",
"typeDisp": "Equity"
}
],
"suggestionMeta": [
"symbol",
"name",
"exch",
"type",
"exchDisp",
"typeDisp"
],
"hiConf": false
}
}
我试过了
import json
import csv
body = {"data":{"suggestionTitleAccessor":"symbol","suggestionMeta":["symbol","name","exch","type","exchDisp","typeDisp"],"hiConf":false,"items":[{"symbol":"ADP","name":"Automatic Data Processing, Inc.","exch":"NMS","type":"S","exchDisp":"NASDAQ","typeDisp":"Equity"},{"symbol":"ADPT","name":"Adeptus Health Inc.","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Equity"},{"symbol":"ADP170217P00080000","name":"ADP170217P00080000","exch":"OPR","type":"O","exchDisp":"OPR","typeDisp":"Option"},{"symbol":"ADP.F","name":"Automatic Data Processing, Inc.","exch":"FRA","type":"S","exchDisp":"Frankfurt","typeDisp":"Equity"},{"symbol":"ADPAJ","name":"Adelphia Recovery Trust","exch":"PNK","type":"S","exchDisp":"OTC Markets","typeDisp":"Equity"},{"symbol":"ADPAS","name":"Adelphia Recovery Trust","exch":"PNK","type":"S","exchDisp":"OTC Markets","typeDisp":"Equity"},{"symbol":"ADPAX","name":"AB Short Duration A","exch":"NAS","type":"M","exchDisp":"NASDAQ","typeDisp":"Fund"},{"symbol":"ADPBX","name":"AB Short Duration B","exch":"NAS","type":"M","exchDisp":"NASDAQ","typeDisp":"Fund"},{"symbol":"ADPCX","name":"AB Short Duration C","exch":"NAS","type":"M","exchDisp":"NASDAQ","typeDisp":"Fund"},{"symbol":"ADP.PA","name":"Aéroports de Paris S.A.","exch":"PAR","type":"S","exchDisp":"Paris","typeDisp":"Equity"}]},"meta":{}}
x = json.loads(body)
f = csv.writer(open("test.csv", "wb+"))
for x in x:
csvwriter.writerow(x())
f.close()
但它会生成一个空的test.csv
文件。我认为这是因为行csvwriter.writerow(x())
,x
是一个数组,我没有正确地写入单元格
编辑:我要寻找的输出类型基本上是一个csv数组,每个项目都是行,因此:
Adeptus Health Inc.,NYQ,S,ADPT,NYSE,Equity
ADP170217P00080000,OPR,O,ADP170217P00080000,OPR,Option
etc
如果你只需要“物品”,你可以做如下的事情
如果i==0:
只写一个头
#coding: utf-8
import json
import csv
body = "..."
x = json.loads(body)
with open('test.csv', 'w', newline='') as csvfile:
wHandle = csv.writer(csvfile)
for i, item in enumerate(x['data']['items']):
if i == 0:
wHandle.writerow(item.keys())
wHandle.writerow(item.values())
对你来说会有帮助的
小例子:
import csv
body = [
{'name': 'A', 'value1': 1, 'value2': 2},
{'name': 'B', 'value1': 1, 'value2': 2}
]
with open('items.csv', 'w') as csvfile:
fieldnames = ['name', 'value1', 'value2']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for item in body:
writer.writerow(item)
我尝试了下面的代码,我使用了文件中的JSON
import csv
import json
json_file='your.json'
with open(json_file, 'r') as json_data:
x = json.load(json_data)
f = csv.writer(open("test.csv", "w"))#store result in test.csv
#store header name in variable, later w.r.t value from variable will retrieve respective data
symbol=x['data']['suggestionMeta'][0]
name=x['data']['suggestionMeta'][1]
exch=x['data']['suggestionMeta'][2]
dtype=x['data']['suggestionMeta'][3]
exchdisp=x['data']['suggestionMeta'][4]
typedisp=x['data']['suggestionMeta'][5]
# Write CSV Header, If you dont need that, remove this line
f.writerow([symbol,name,exch,dtype,exchdisp,typedisp])
for key in x['data']['items']:
f.writerow([key[symbol],key[name],key[exch],key[dtype],key[exchdisp],key[typedisp]])
输出
symbol,name,exch,type,exchDisp,typeDisp
ADP,"Automatic Data Processing, Inc.",NMS,S,NASDAQ,Equity
ADPT,Adeptus Health Inc.,NYQ,S,NYSE,Equity
ADP170217P00080000,ADP170217P00080000,OPR,O,OPR,Option
ADP.F,"Automatic Data Processing, Inc.",FRA,S,Frankfurt,Equity
ADPAJ,Adelphia Recovery Trust,PNK,S,OTC Markets,Equity
ADPAS,Adelphia Recovery Trust,PNK,S,OTC Markets,Equity
ADPAX,AB Short Duration A,NAS,M,NASDAQ,Fund
ADPBX,AB Short Duration B,NAS,M,NASDAQ,Fund
ADPCX,AB Short Duration C,NAS,M,NASDAQ,Fund
ADP.PA,Aéroports de Paris S.A.,PAR,S,Paris,Equity
希望这对您有所帮助CSV和JSON是根本不同的。CSV是二维的,JSON是N维的。要回答的第一个问题是,您希望如何在CSV文件中表示您的N维数据。您能否举例说明您期望的结果(例如,前五行)?而且,x中x的
看起来不正确,即使是这样。而body
应该是一个字符串,而不是对象。@Chris这个JSON看起来像一个平面记录序列,所以它本质上是二维的。我同意“如何”是一个重要的问题,though@Rhymoid,JSON中的顶级容器是对象,而不是数组,其内容是嵌套的。我不确定你是如何将其视为一个平面记录序列的,除非你专注于内部项数组,而忽略其他值,如元或hiConf
(位于数据)中。如果我理解正确,他希望通过项键入OP的示例来创建csv,您可以从json_data['data']['suggestionMeta']
中提取fieldnames
。