【问题标题】:Get broken JSON to CSV python获取损坏的 JSON 到 CSV python
【发布时间】:2020-11-07 20:09:38
【问题描述】:

我正在尝试采用格式不佳的 JSON 并将其转换为 CSV。下面是一个json示例:

[
  {
    "fields": [
      {
        "label": "starttime",
        "field": "starttime",
        "type": "integer"
      },
      {
        "label": "endTime",
        "field": "endTime",
        "type": "integer"
      },
      {
        "label": "duration",
        "field": "duration",
        "type": "integer"
      },
      {
        "label": "metrics",
        "field": "metrics",
        "type": "integer"
      },
      {
        "label": "email",
        "field": "email",
        "type": "string"
      },
     ]
    "results": [
      [
        15949132375,
        15949133139,
        763,
        7,
        "newemail@gmail.com"
      ],
      [
        15949132376,
        15949133140,
        764,
        8,
        "newemail1@gmail.com"
      ],
      [
        15949132377,
        15949133141,
        765,
        9,
        "newemail2@gmail.com"
      ],
      [
        15949132378,
        15949133142,
        766,
        10,
        "newemail3@gmail.com"
      ],
      [
        15949132379,
        15949133143,
        767,
        11,
        "newemail4@gmail.com"
      ],
      [
        15949132380,
        15949133144,
        768,
        12,
        "newemail5@gmail.com"
      ],
      [
        15949132381,
        15949133145,
        769,
        13,
        "newemail6@gmail.com"
      ],
      [
        15949132382,
        15949133146,
        770,
        14,
        "newemail7@gmail.com"
      ],
      [
        15949132383,
        15949133147,
        771,
        15,
        "newemail8@gmail.com"
      ],
    ]
  }
]

这是一个示例,因为结果有几千个条目。我需要尝试将上部“字段”部分的值作为标题,并将“结果”放入这些标题下方的行中,因为它们是与“字段”一起使用的数据

正如我所说,json 没有正确导出,并且无法使用密钥以正确的格式获取它。如何将此数据转换为 CSV?如果不是 CSV,我怎样才能将其格式化为正确的 JSON,使用“字段”“标签”作为结果中每个对应行的键?

我尝试过浏览 pandas 并创建一个 df。从每个数据集(字段、标签)和结果创建一个列表,但无法正确连接它们。

请帮忙?

【问题讨论】:

  • 格式无关。语法是

标签: python json list csv for-loop


【解决方案1】:

json 文件可以被读取,并且可以使用“re”模块进行评估,以分隔字段和结果。然后可以将结果写入输出 csv 文件

建议代码:

import re
import csv
with open("sample.json") as fptr :
    fstr = fptr.read()
    #jsonStr = eval(fstr)
    fields = re.findall ('"fields": (\[.*?\])', fstr, re.M+re.S+re.I)
    fields = eval(fields[0])
    headers = [ f['label'] for f in fields]
    results = re.findall ('"results": (\[.*\]).*}', fstr, re.M+re.S+re.I)
    results = eval(results[0])
    # print (fields, results, headers)

with open ("output.csv", "w", newline="") as fptr :
    recordWrite = csv.writer(fptr, dialect='excel')
    recordWrite.writerow(headers)
    recordWrite.writerows(results)

注意:查看上面的 json,可以使用“eval”而不是“re”来评估整个文件内容。唯一需要的更改是在列表结束和“字段”开始后添加一个逗号。

【讨论】:

    猜你喜欢
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2015-09-24
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多