亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將損壞的 JSON 轉換為 CSV python

將損壞的 JSON 轉換為 CSV python

莫回無 2023-03-16 17:14:51
我正在嘗試采用格式不正確的 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,        "[email protected]"      ],      [        15949132376,        15949133140,        764,        8,        "[email protected]"      ],      [        15949132377,        15949133141,        765,        9,        "[email protected]"      ],      [        15949132378,        15949133142,        766,        10,        "[email protected]"      ],      [        15949132379,        15949133143,        767,        11,        "[email protected]"      ],      [        15949132380,        15949133144,        768,        12,        "[email protected]"      ],      [        15949132381,        15949133145,        769,        13,        "[email protected]"      ],      [        15949132382,        15949133146,        770,        14,        "[email protected]"      ],      [        15949132383,        15949133147,        771,        15,        "[email protected]"      ],    ]  }]這是一個樣本,因為結果有幾千個條目。我需要嘗試將上部“字段”部分的值作為標題,并將“結果”放入這些標題下方的行中,因為它們是與“字段”一起使用的數據正如我所說,json 導出不正確,使用密鑰以正確的格式獲取它不是一個選項。如何將此數據轉換為 CSV?如果不是 CSV,如何使用“字段”“標簽”作為結果中每個相應行的鍵,將其格式化為正確的 JSON?我試過只通過 pandas 并創建一個 df。從每個數據集(字段、標簽)和結果創建一個列表,無法正確連接它們。
查看完整描述

1 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

可以讀取 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”來評估整個文件內容。唯一需要的更改是在列表結束和“字段”開始后添加一個逗號。


查看完整回答
反對 回復 2023-03-16
  • 1 回答
  • 0 關注
  • 79 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號