首页 > 解决方案 > 将格式 json 转换为 csv

问题描述

我有 json

{
  "licenses": [
    {
      "name": "",
      "id": 0,
    }
  ],
  "info": {
    "contributor": "",
    "version": "",
    "year": ""
  }

我有一个脚本,它读取 json 并使用licenses参数保存新的 csv。如何添加额外的参数,例如info?在熊猫的帮助下

import json
import pandas as pd


data = json.load(open('file.json'))
df = pd.DataFrame(data["licenses"])

df.to_csv('test.csv', index=False)

标签: pythonpandas

解决方案


假设您extra_info将许可证 ID 映射到一些额外信息。下面是将基础数据与许可证和额外信息合并的代码,从而导致最终许可证数据具有额外的info字段。这两个列表是基于共同id字段连接的。在我的代码中,我跳过了从 JSON 文件中读取的内容,我认为这是显而易见且微不足道的。

data你必须在和之间有一些对应关系extra_info。我认为这两个数据都有独特的共同id领域。因为如果没有共同点,您将如何判断哪些信息对应于数据中的哪些许可证?至少它们必须通过在列表中具有相同的位置来相互对应。

在线尝试!

data = {
  "licenses": [
    {
      "name": "name0",
      "id": 0,
    },
    {
      "name": "name1",
      "id": 1,
    },
  ],
  "info": {
    "contributor": "",
    "version": "",
    "year": ""
  }
}
# Extra info fields indexed by id.
extra_info = [
    {
        'id': 0,
        'info': 'info0',
    },
    {
        'id': 1,
        'info': 'info1',
    },
]
import json, pandas as pd
info_map = {e['id'] : e for e in extra_info}
licenses = [{**e, 'info': info_map[e['id']]['info']} for e in data['licenses']]
df = pd.DataFrame(licenses)
df.to_csv('0491.csv', index = False)

输出:

name,id,info
name0,0,info0
name1,1,info1

推荐阅读