Python读取JSON文件格式异常,如何单独输出子节点内容?
问题描述
我正在开发一个从JSON格式文件提取数据的解析器,这是我首次接触JSON。测试读取文件并输出内容时,显示结果不符合预期。
JSON文件部分内容如下:
{ "jobs" : [ { "jobname" : "workload", "groupid" : 0, "eta" : 0, "elapsed" : 69, "job options" : { "bs" : "4k", "rw" : "randread" }, "read" : { "io_bytes" : 2000, "bw" : 560, "slat_ns" : { "min" : 0, "max" : 0, "mean" : 0 } } } ] }
我编写的Python代码如下:
import json # Opening JSON file f = open('workload.log') # returns JSON object as a dictionary data = json.load(f) # Iterating through the json list for i in data['jobs']: print(i) # Closing file f.close()
我预期输出会将job options、read作为独立类别单独显示,但实际输出将所有内容打印在一行且包含完整子节点数据。我希望能单独打印这些子部分,请问该如何实现?
解决方案
直接打印整个字典会把所有内容压缩成一行,要单独显示job options和read这类子部分,你可以针对性提取对应键的值,再用json.dumps()格式化输出,让结构更清晰。
修改后的代码如下:
import json # 用with语句自动管理文件,无需手动调用close with open('workload.log') as f: data = json.load(f) # 遍历jobs列表中的每个任务项 for job in data['jobs']: # 单独打印job options print("=== job options ===") print(json.dumps(job['job options'], indent=4)) # 单独打印read print("\n=== read ===") print(json.dumps(job['read'], indent=4)) # 按需单独打印其他基础字段 print("\n=== 基础任务信息 ===") print(f"jobname: {job['jobname']}") print(f"groupid: {job['groupid']}") print(f"eta: {job['eta']}") print(f"elapsed: {job['elapsed']}")
关键说明
with open(...)语句会在代码块结束后自动关闭文件,比手动调用close()更安全简洁。json.dumps(obj, indent=4)会把字典格式化为带缩进的多行结构,和原始JSON格式一致,可读性更强。- 如果需要提取子部分里的具体节点(比如
read中的bw),可以直接通过job['read']['bw']定位并打印。
内容的提问来源于stack exchange,提问作者hacker_man_2021
相关产品推荐
相关产品推荐

