本文介绍基于Python,读取JSON文件数据,并将JSON文件中指定的键值对数据转换为.csv
格式文件的方法。
在之前的文章Python将JSON数据转换为.csv格式等的表格中,我们就介绍过将JSON文件数据保存到.csv
格式或.xlsx
格式的表格文件中的方法;而本文我们将针对不同的待提取数据特征,给出另一种方法。
首先,我们来明确一下具体的需求。我们现有一个JSON文件数据,是一个包含多个JSON对象的列表,如下图所示;其中,我们希望将text
中的内容提取出来——text
中的数据都是以键值对的形式存储的,我们希望的是,将键值对的键作为.csv
格式文件的列名,而值则是这一列对应的值;因为这个JSON数据中包含很多个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数据的json
和用于处理CSV文件的csv
。
接下来,我们打开名为single.json
的JSON文件并读取其内容,将其存储在data
变量中。json.load(file)
用于将JSON文件内容加载到Python数据结构中。随后,创建一个空集合fieldnames
,用于存储将在CSV文件的头部写入的列名。
紧接着,我们遍历data
列表中的每个元素,其中每个元素是一个包含JSON格式的字符串的字典。对于每个元素,将JSON文本——也就是item['text']
解析为字典,并获取该字典中的所有键。这些键将被添加到fieldnames
集合中,以便稍后在CSV文件的头部(列名称)使用。
其次,创建一个CSV文件output.csv
以进行写入,使用csv.DictWriter
对象初始化,其中指定了要写入的列名(通过fieldnames
变量)。使用writer.writeheader()
写入CSV文件的头部,这将包含字段名称。最后,遍历data
列表中的每个元素,对于每个元素,将JSON文本解析为字典,并将该字典的数据写入CSV文件中,每行对应一个JSON对象。
执行上述代码,我们即可在指定的结果.csv
格式文件中看到我们转换之后的数据结果;如下图所示。其中,紫色框内部分就是列名,也就是我们提取出来的键,而值则是每一行的数据。
至此,大功告成。