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

Python如何优雅解析Web服务返回的不完整JSON字符串?

不完整JSON解析优化方案

核心思路

你的输入字符串本质是标准JSON对象的内部键值对片段,仅缺失外层的{}包裹,无需做复杂的分割拼接操作,直接补全外层括号后用标准JSON库解析即可,容错性和可读性都远高于原有方案。

注意:如果你的实际接口返回的是经过HTML转义的字符串(包含"这类转义符),先做HTML反转义再解析:

import html
x = html.unescape(x)

实现代码

方案1:直接解析为标准对象(更推荐)

绝大多数场景下这种键值对结构用对象格式更方便,一行即可完成解析:

import json

x = '"1":{"name":"item one","code":"1"},"2":{"name":"item two","code":"2"},"3":{"name":"item three","code":"3"}'
# 补全外层大括号后解析
data = json.loads(f"{{{x}}}")

解析结果:

{
    "1": {"name": "item one", "code": "1"},
    "2": {"name": "item two", "code": "2"},
    "3": {"name": "item three", "code": "3"}
}

可以直接用data["1"]的方式取值,比数组格式易用性更高。

方案2:输出和原有代码完全一致的数组格式

如果必须要和你之前的输出格式保持一致,解析完成后用列表推导转换即可:

import json

x = '"1":{"name":"item one","code":"1"},"2":{"name":"item two","code":"2"},"3":{"name":"item three","code":"3"}'
data = json.loads(f"{{{x}}}")
# 转换为单键对象数组
res = [{k: v} for k, v in data.items()]

res的结果和你原有代码输出完全相同:

[
    {'1': {'name': 'item one', 'code': '1'}},
    {'2': {'name': 'item two', 'code': '2'}},
    {'3': {'name': 'item three', 'code': '3'}}
]

原有方案的问题

你原来的字符串分割拼接方案容错性极低,一旦业务数据的字段值中出现},字符,整个解析逻辑就会出错,而本方案完全遵循JSON规范,不存在这类边界问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:57:03