【问题标题】:Copy a json nested dictionary to csv file将 json 嵌套字典复制到 csv 文件
【发布时间】:2016-08-19 21:38:01
【问题描述】:

我需要将 json 中的以下嵌套字典从 api 复制到 csv 文件

{
 "result": [{
               "short_description": "I am getting bluescreen error",
               "sys_id": "39b5f8c2376ede007520021a54990e5c",
               "opened_at": "2016-04-04 05:19:53",
               "number":"INC0258523"
             },
             {
               "short_description": "laptop crashed with a blue screen",
               "sys_id": "da0095380f43d200a4f941fce1050eeb",
               "opened_at":"2016-04-25 06:33:52",
               "number":"INC0259067"
             }, 
             {
               "short_description": "Laptop not booting",
               "sys_id": "ecf9c9b00f43d200a4f941fce1050e17",
               "opened_at": "2016-04-25 06:07:16",
               "number": "INC0259061"
             }]
}

这是我迄今为止尝试过的

  with open('D:/file.csv', 'wb') as f:  
        w = csv.DictWriter(f, data.keys())   
        w.writerow(data)

我在 csv 文件的单个单元格中得到以下结果

[{"short_description":"I am getting bluescreen error","sys_id":"39b5f8c2376ede007520021a54990e5c","opened_at":"2016-04-04 05:19:53","number":"INC0258523"},{"short_description":"laptop crashed with a blue screen","sys_id":"da0095380f43d200a4f941fce1050eeb","opened_at":"2016-04-25 06:33:52","number":"INC0259067"},{"short_description":"Laptop not booting","sys_id":"ecf9c9b00f43d200a4f941fce1050e17","opened_at":"2016-04-25 06:07:16","number":"INC0259061"}]}

而我需要它采用以下格式,其中键 short_description、sys_id、opened_at、number 是列名,它们的值作为对应的列数据。

【问题讨论】:

  • 什么是data?如果是json字符串,需要先解码使用json.loads(data)
  • 在写入之前,您必须将数据序列化为一个列表,其中每个项目代表一个单元格。
  • data 是一个 json 字符串,我使用了 json.loads(data)。
  • 如何序列化它? @克劳斯
  • 这取决于您期望的输出。您应该在问题中添加一个示例。

标签: python json csv dictionary nested


【解决方案1】:

您需要提取行字典。现在,您正在使用顶级 'result' dict 来提供 csv 编写器。

  with open('D:/file.csv', 'wb') as f:  
        w = csv.DictWriter(f, data['result'][0].keys())   
        for row in data['result']:
            w.writerow(row)

【讨论】:

  • 现在我只需要列名
  • data['result'][0].keys() 是列名。
猜你喜欢
  • 2016-11-22
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多