Python將JSON鍵值對導出為CSV

??本文介紹基于Python,讀取JSON文件數(shù)據(jù),并將JSON文件中指定的鍵值對數(shù)據(jù)轉換為.csv格式文件的方法。

??在之前的文章Python將JSON數(shù)據(jù)轉換為.csv格式等的表格中,我們就介紹過將JSON文件數(shù)據(jù)保存到.csv格式或.xlsx格式的表格文件中的方法;而本文我們將針對不同的待提取數(shù)據(jù)特征,給出另一種方法。

??首先,我們來明確一下具體的需求。我們現(xiàn)有一個JSON文件數(shù)據(jù),是一個包含多個JSON對象的列表,如下圖所示;其中,我們希望將text中的內(nèi)容提取出來——text中的數(shù)據(jù)都是以鍵值對的形式存儲的,我們希望的是,將鍵值對作為.csv格式文件的列名,而則是這一列對應的值;因為這個JSON數(shù)據(jù)中包含很多個text(每一個text中的所有都是一樣的,但是不完全一致),所以我們最后就會得到一個具有很多行的.csv格式文件。

??明確了需求,我們就可以開始代碼的撰寫。本文所用代碼如下。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Sep 15 11:12:01 2023

@author: fkxxgis
"""

import json
import csv

json_file = "/Users/ddd/Downloads/single.json"

with open(json_file, 'r') as file:
    data = json.load(file)

fieldnames = set()
for item in data:
    fieldnames.update(json.loads(item['text']).keys())

csv_filename = "/Users/didi/Downloads/output.csv"

with open(csv_filename, 'w', newline='') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for item in data:
        json_string = item['text']
        row_data = json.loads(json_string)
        writer.writerow(row_data)

??其中,我們首先通過import語句導入必要的Python模塊,包括用于處理JSON數(shù)據(jù)的json和用于處理CSV文件的csv。

??接下來,我們打開名為single.jsonJSON文件并讀取其內(nèi)容,將其存儲在data變量中。json.load(file)用于將JSON文件內(nèi)容加載到Python數(shù)據(jù)結構中。隨后,創(chuàng)建一個空集合fieldnames,用于存儲將在CSV文件的頭部寫入的列名。

??緊接著,我們遍歷data列表中的每個元素,其中每個元素是一個包含JSON格式的字符串的字典。對于每個元素,將JSON文本——也就是item['text']解析為字典,并獲取該字典中的所有鍵。這些鍵將被添加到fieldnames集合中,以便稍后在CSV文件的頭部(列名稱)使用。

??其次,創(chuàng)建一個CSV文件output.csv以進行寫入,使用csv.DictWriter對象初始化,其中指定了要寫入的列名(通過fieldnames變量)。使用writer.writeheader()寫入CSV文件的頭部,這將包含字段名稱。最后,遍歷data列表中的每個元素,對于每個元素,將JSON文本解析為字典,并將該字典的數(shù)據(jù)寫入CSV文件中,每行對應一個JSON對象。

??執(zhí)行上述代碼,我們即可在指定的結果.csv格式文件中看到我們轉換之后的數(shù)據(jù)結果;如下圖所示。其中,紫色框內(nèi)部分就是列名,也就是我們提取出來的,而則是每一行的數(shù)據(jù)。

??至此,大功告成。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容