Python實現(xiàn)提取JSON數(shù)據(jù)中的鍵值對并保存為.csv文件
在之前的文章Python提取JSON文件中的指定數(shù)據(jù)并保存在CSV或Excel表格文件內(nèi)中,我們就介紹過將JSON文件數(shù)據(jù)保存到.csv格式或.xlsx格式的表格文件中的方法;而本文我們將針對不同的待提取數(shù)據(jù)特征,給出另一種方法。
首先,我們來明確一下具體的需求。我們現(xiàn)有一個JSON文件數(shù)據(jù),是一個包含多個JSON對象的列表,如下圖所示;其中,我們希望將text中的內(nèi)容提取出來——text中的數(shù)據(jù)都是以鍵值對的形式存儲的,我們希望的是,將鍵值對的鍵作為.csv格式文件的列名,而值則是這一列對應(yīng)的值;因為這個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語句導(dǎo)入必要的Python模塊,包括用于處理JSON數(shù)據(jù)的json和用于處理CSV文件的csv。
接下來,我們打開名為single.json的JSON文件并讀取其內(nèi)容,將其存儲在data變量中。json.load(file)用于將JSON文件內(nèi)容加載到Python數(shù)據(jù)結(jié)構(gòu)中。隨后,創(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文件中,每行對應(yīng)一個JSON對象。
執(zhí)行上述代碼,我們即可在指定的結(jié)果.csv格式文件中看到我們轉(zhuǎn)換之后的數(shù)據(jù)結(jié)果;如下圖所示。其中,紫色框內(nèi)部分就是列名,也就是我們提取出來的鍵,而值則是每一行的數(shù)據(jù)。
至此,大功告成。
到此這篇關(guān)于Python實現(xiàn)提取JSON數(shù)據(jù)中的鍵值對并保存為.csv文件的文章就介紹到這了,更多相關(guān)Python提取json數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!