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",

我从未使用过json,而且我几乎不是python用户,您如何将此json格式写入csv文件:

{
    "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