簡體   English   中英

無法使用 python 從 JSON 生成正確的 csv 文件

[英]Not able to generate a proper csv file from JSON using python

我無法使用以下代碼生成正確的 csv 文件。 但是當我單獨查詢時,我得到了想要的結果。 下面是我的 json 文件和代碼

{
"quiz": {
    "maths": {
      "q2": {
            "question": "12 - 8 = ?",
            "options": [
                "1",
                "2",
                "3",
                "4"
            ],
            "answer": "4"
        },
        "q1": {
            "question": "5 + 7 = ?",
            "options": [
                "10",
                "11",
                "12",
                "13"
            ],
            "answer": "12"
        }
        
    },
    "sport": {
        "q1": {
            "question": "Which one is correct team name in NBA?",
            "options": [
                "New York Bulls",
                "Los Angeles Kings",
                "Golden State Warriros",
                "Huston Rocket"
            ],
            "answer": "Huston Rocket"
        }
    }        
}

}

import json
import csv

# Opening JSON file and loading the data
# into the variable data
with open('tempjson.json', 'r') as jsonFile:
    data = json.load(jsonFile)
    flattenData=flatten(data)

employee_data=flattenData

# now we will open a file for writing
data_file = open('data_files.csv', 'w')

# create the csv writer object
csv_writer = csv.writer(data_file)

# Counter variable used for writing 
# headers to the CSV file
count = 0

for emp in employee_data:
    if count == 0:

        # Writing headers of CSV file
        header = emp
        csv_writer.writerow(header)
        count += 1

    # Writing data of CSV file
    #csv_writer.writerow(employee_data.get(emp))

data_file.close()

執行上述代碼后,我得到如下信息:

在此處輸入圖像描述

我不明白我做錯了什么。 我正在展平我的 json 文件,然后嘗試將其更改為 csv

您可以使用 Pandas 數據幀輕松操作 JSON 並將其保存到 CSV。 我不確定您想要的 CSV 應該是什么樣子,但以下代碼會生成一個 CSV 列問題、選項和答案。 它會在按字母順序排列的列表中生成一個包含測驗名稱和問題編號的索引列(您的 JSON 是無序的)。 當添加更多不同的測驗和問題時,下面的代碼也將起作用。

也許在 Python 中本地轉換它在性能方面更好,但使用 Pandas 進行操作更容易。

import pandas as pd

# create Pandas dataframe from JSON for easy manipulation
df = pd.read_json("tempjson.json")

# create result dataframe
df_result = pd.DataFrame()

# Get nested dict from each dataframe row
for index, row in df.iterrows():
    
    # Convert it into a new dataframe
    df_temp = pd.DataFrame.from_dict(df.loc[index]['quiz'], orient='index')
    # Add name of quiz to index
    df_temp.index = index + ' ' + df_temp.index
    # Append row result to final dataframe
    df_result = df_result.append(df_temp)
    
# Optionally sort alphabetically so questions are in order
df_result.sort_index(inplace=True)

# convert dataframe to CSV
df_result.to_csv('quiz.csv')

CSV

根據要求更新:使用扁平 JSON 導出到 CSV:

import json
import csv
from flatten_json import flatten
import pandas

# Opening JSON file and loading the data
# into the variable data
with open("tempjson.json", 'r') as jsonFile:
    data = json.load(jsonFile)
    flattenData=flatten(data)
    
    
df = pd.DataFrame.from_dict(flattenData, orient='index')    

# convert dataframe to CSV
df.to_csv('quiz.csv', header=False)    

結果如下 CSV (不確定您想要的結果是什么,因為您沒有在問題中提供所需的結果)。

csv扁平化輸出

暫無
暫無

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

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