簡體   English   中英

使用 python 將 JSON 轉換為 CSV 文件

[英]convert JSON to CSV file using python

我正在嘗試從 JSON 文件中獲取數據並將其存儲到 csv 文件中。 這個 JSON 文件具有嵌套和多個相同鍵值的記錄,即value

源文件:

我嘗試了下面的代碼,它使 json 文件變平,但我無法獲得所需的 csv 格式。

import pandas as pd
import json

def flatten_json(nested_json):
    out = {}

    def flatten(x, name=''):
        if type(x) is dict:
            for a in x:
                flatten(x[a], name + a + '_')
        elif type(x) is list:
            i = 0
            for a in x:
                flatten(a, name + str(i) + '_')
                i += 1
        else:
            out[name[:-1]] = x

    flatten(nested_json)
    return out


response = json.loads(data)
df=pd.Series(flatten_json(response)).to_frame()
print(df)

下面是執行上述代碼后得到的 output:

                                                          0
data_Value_strt_0_col1                                 John
data_Value_strt_0_col2                                David
data_Value_strt_0_col3                                 Lisa
data_Value_strt_0_col4                                 None
data_Value_strt_0_col5                                 None
data_Value_strt_0_data_byValue_0_col3                   dev
data_Value_strt_0_data_byValue_0_col6                  None
data_Value_strt_0_data_byValue_0_col1                  None
data_Value_strt_0_data_byValue_0_data_value_201...    02.22
data_Value_strt_0_data_byValue_0_data_value_2020-1    12.32
data_Value_strt_1_col1                                  Ram
data_Value_strt_1_col2                                Shyam
data_Value_strt_1_col3                              Kishore
data_Value_strt_1_col4                                 None
data_Value_strt_1_col5                                 None
data_Value_strt_1_data_byValue_0_col3                   prd
data_Value_strt_1_data_byValue_0_col6                  None
data_Value_strt_1_data_byValue_0_col1                  None
data_Value_strt_1_data_byValue_0_data_value_2020-3    12.87
data_Value_strt_1_data_byValue_1_col3               dev-prd
data_Value_strt_1_data_byValue_1_col6                  None
data_Value_strt_1_data_byValue_1_col1                  None
data_Value_strt_1_data_byValue_1_data_value_201...     3.39
data_Value_strt_1_data_byValue_1_data_value_201...     9.24

我無法使用上面的代碼達到上述格式,因為 Key 'value' 有嵌套和多個值

以下適用於您提供的數據。 如果您沒有顯示更多數據並且格式發生更改,則這可能不起作用:

import json
import csv

data = ...

info = json.loads(data)["data"]["Value"]["strt"]

fieldnames = ["Name1", "Name2", "Name3", "Col_4", "Col_5", "Val_Col3", "Val_Col6", "Val_Col1", "Val_Year", "Val_Month", "Value"]

with open("output.csv", "w", newline="") as file:
    writer = csv.writer(file)
    writer.writerow(fieldnames)

    for d1 in info:
        for d2 in d1["data"]["byValue"]:
            for key, value in d2["data"]["value"].items():
                year, month = key.split("-")
                row = [d1["col1"], d1["col2"], d1["col3"], d1["col4"], d1["col5"], d2["col3"], d2["col6"], d2["col1"], year, month, value]
                writer.writerow(row)

這將以您指定的格式寫入 CSV 文件。 csv.writer object None將值作為空字符串寫入文件。 如果要在 CSV 文件中引入空格,以便分隔符對齊,則可能需要進行一些更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM