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

Python循环生成JSON对象输出为字符串而非预期结构如何解决

错误原因
  • 结构预期错误:你预期的JSON结构不合法,同一个对象内重复的dataset等键会被后写入的内容覆盖,需要按索引访问多条数据应该使用**数组(列表)**结构,而非单个JSON对象。
  • 循环赋值逻辑错误:你在循环内每次都将json_obj覆盖为json.dumps()的返回值,该函数返回的是JSON格式字符串,不是可操作的Python容器对象,且循环结束后只会保留最后一次的序列化结果。
  • 二次序列化错误:你后续对已经是字符串的json_obj再次执行json.dumps(),相当于对字符串做二次序列化,自然会生成带转义符的结果,此时取[0]访问到的就是字符串的首个字符双引号。
修复方案

首先初始化空列表存储所有单条数据,循环内仅将单条结果的字典追加到列表中,所有计算完成后再按需操作:

import json

# 初始化列表存储多条结果
json_list = []
for i in range(len(dictionary)):
    dataset, test = retrieve_data()
    tp, fp, tn, fn = calculate_score()
    # 追加单条数据到列表
    json_list.append({
        "dataset": dataset,
        "test": test,
        "results": {"TP": tp, "FP": fp, "FN": fn, "TN": tn}
    })

# 直接操作Python列表对象即可通过索引访问第一条数据
print(json_list[0])

# 如果需要导出为JSON格式字符串,统一做一次序列化即可
json_str = json.dumps(json_list, indent=4)
print(json_str)

最终生成的JSON结构为数组,完全支持通过下标索引访问对应条目:

[
    {
        "dataset": "1",
        "test": "trial1",
        "results": {
            "TP": 5,
            "FP": 3,
            "FN": 2,
            "TN": 5
        }
    },
    {
        "dataset": "2",
        "test": "trial2",
        "results": {
            "TP": 6,
            "FP": 4,
            "FN": 12,
            "TN": 25
        }
    },
    {
        "dataset": "3",
        "test": "trial3",
        "results": {
            "TP": 15,
            "FP": 1,
            "FN": 11,
            "TN": 2
        }
    },
    {
        "dataset": "4",
        "test": "trial4",
        "results": {
            "TP": 5,
            "FP": 11,
            "FN": 1,
            "TN": 21
        }
    }
]

内容的提问来源于stack exchange,提问作者Fabio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:24:03