You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:35:24