使用python 3将Json嵌套到csv

使用python 3将Json嵌套到csv,python,python-3.x,csv,Python,Python 3.x,Csv,我试图在Python中将JSON数据转换为CSV,并在Stack Exchange上找到了这段代码(链接:)。它在Python3中不再工作,这给了我不同的错误。有人知道如何修复Python3吗?谢谢 下面是我的JSON数据: { "fruit": [ { "name": "Apple", "binomial name": "Malus domestica", "major_producers": [ "China", "United States", "Tu

我试图在Python中将JSON数据转换为CSV,并在Stack Exchange上找到了这段代码(链接:)。它在Python3中不再工作,这给了我不同的错误。有人知道如何修复Python3吗?谢谢

下面是我的JSON数据:

{ "fruit": [ 
    { "name": "Apple", 
      "binomial name": "Malus domestica", 
      "major_producers": [ "China", "United States", "Turkey" ], 
      "nutrition": 
          { "carbohydrates": "13.81g", 
            "fat": "0.17g", 
            "protein": "0.26g" 
          } 
     }, 
     { "name": "Orange", 
       "binomial name": "Citrus x sinensis", 
       "major_producers": [ "Brazil", "United States", "India" ],
       "nutrition": 
          { "carbohydrates": "11.75g", 
            "fat": "0.12g", 
            "protein": "0.94g" 
          } 
      }, 
      { "name": "Mango", 
        "binomial name": "Mangifera indica", 
        "major_producers": [ "India", "China", "Thailand" ],
        "nutrition": 
            { "carbohydrates": "15g", 
              "fat": "0.38g", 
              "protein": "0.82g" 
            } 
       } 
] }
输出CSV应该如下所示


最简单的方法是将所需的dict放入pandas数据帧,并使用其
。to_csv()
方法:

json_data = { "fruit": [ { "name": "Apple", "binomial name": "Malus domestica", "major_producers": [ "China", "United States", "Turkey" ], "nutrition": { "carbohydrates": "13.81g", "fat": "0.17g", "protein": "0.26g" } }, { "name": "Orange", "binomial name": "Citrus x sinensis", "major_producers": [ "Brazil", "United States", "India" ], "nutrition": { "carbohydrates": "11.75g", "fat": "0.12g", "protein": "0.94g" } }, { "name": "Mango", "binomial name": "Mangifera indica", "major_producers": [ "India", "China", "Thailand" ], "nutrition": { "carbohydrates": "15g", "fat": "0.38g", "protein": "0.82g" } } ] }
df = pd.DataFrame(json_data['fruit'])
df.to_csv('/wherever/file/shall/roam/test.csv')
这将导致一个csv文件,如


仍在使用pandas,但方法略有不同,将JSON视为字典

import pandas as pd
import pprint as pprint
x = { "fruit": [ { "name": "Apple", "binomial name": "Malus domestica", "major_producers": [ "China", "United States", "Turkey" ], "nutrition": { "carbohydrates": "13.81g", "fat": "0.17g", "protein": "0.26g" } }, { "name": "Orange", "binomial name": "Citrus x sinensis", "major_producers": [ "Brazil", "United States", "India" ], "nutrition": { "carbohydrates": "11.75g", "fat": "0.12g", "protein": "0.94g" } }, { "name": "Mango", "binomial name": "Mangifera indica", "major_producers": [ "India", "China", "Thailand" ], "nutrition": { "carbohydrates": "15g", "fat": "0.38g", "protein": "0.82g" } } ] }
在dict中添加一些额外的信息,这些信息将提供更接近所需输出的额外标题

for item in x['fruit']:
  for index, country in enumerate(item['major_producers']):
    new_key = 'major_producers'+str(index + 1)
    item[new_key] = country
  item['carbs'] = item['nutrition']['carbohydrates']
  item['fat'] = item['nutrition']['fat']
  item['protein']= item['nutrition']['protein']
更新后的词典打印得很漂亮

pprint(x['fruit'])

从DICT列表中创建数据帧,如中所示:

xdf = pd.DataFrame.from_dict(x['fruit'])
仅使用所需的标题

xdf = xdf[['name', 'binomial name', 'major_producers1','major_producers2','major_producers3','carbs','fat','protein']]
然后,正如@SpghttCd提到的,您可以使用pd.to_csv。在这种情况下不需要索引

xdf.to_csv('filename.csv',index=False)
csv文件应如下所示:


你得到了什么错误?你找到了什么代码?你的问题中没有代码,也没有错误,我们能做什么?我已经添加了代码这些是我得到的错误:字符串索引必须是整数,attributeError:'str'对象没有属性'keys',TypeError:字符串索引必须是整数,列表索引超出范围,“dict_keys”对象不是subscriptables,但我的CSV输出应该与上面提到的完全一样。是否可以将脚本设置为通用脚本,以便它适用于任何嵌套的json文件?我正在处理一个项目。我的系统每天运行一个特定的作业,它将生成JSON文件(与上面嵌套的JSON相同)。我需要将这些数据转换为CSV格式以进行报告。@RaviKumarTC在本例中,诀窍是了解数据源。(希望这有点一致)如果一个key:value是一个列表,那么它的处理方式需要与另一个dict不同。使用pandas的底线是为CSV中的每一行获取一个简单的key:value dict列表。谢谢@Timothy Lombard。你能帮我解决这个问题吗?我的系统将每天生成一个JSON文件(嵌套JSON)。我试图在pyton 3中编写一个脚本,将其转换为csv文件。注意-该脚本应适用于任何嵌套的JSON数据。