[英]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.