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

Python中解析特殊JSON字符串为字典数组的正确方法

如何将特殊格式字符串解析为Python字典数组

先看你给出的原始字符串:

raw_str = '[\'{"cx":3575,"cy":1657,"r":98}\', \'{"cx":3284,"cy":1706,"r":81}\', \'{"cx":4260,"cy":1611,"r":97}\', \'{"cx":3350,"cy":1632,"r":60}\', \'{"cx":3475,"cy":1586,"r":77}\', \'{"cx":4243,"cy":1474,"r":87}\']'

这个字符串存在几个格式问题:外层由单引号包裹,内部双引号被转成了HTML实体",每个字典元素还被转义单引号\'包裹。下面提供两种可行的处理方案:

方案一:字符串预处理 + JSON解析

手动修正字符串格式后,用JSON模块完成解析:

import json

raw_str = '[\'{"cx":3575,"cy":1657,"r":98}\', \'{"cx":3284,"cy":1706,"r":81}\', \'{"cx":4260,"cy":1611,"r":97}\', \'{"cx":3350,"cy":1632,"r":60}\', \'{"cx":3475,"cy":1586,"r":77}\', \'{"cx":4243,"cy":1474,"r":87}\']'

# 将HTML实体的双引号替换为真实双引号
processed_str = raw_str.replace('"', '"')
# 去掉外层单引号,同时移除内部的转义单引号
processed_str = processed_str[1:-1].replace("'", "")
# 重新拼接为合法的JSON数组格式
valid_json = f"[{processed_str}]"
# 解析为字典数组
result = json.loads(valid_json)

# 验证结果
print(result)
print(type(result))       # 输出 <class 'list'>
print(type(result[0]))    # 输出 <class 'dict'>

方案二:用ast模块解析(更健壮)

ast模块能正确识别转义字符,处理逻辑更省心:

import ast
import json

raw_str = '[\'{&quot;cx&quot;:3575,&quot;cy&quot;:1657,&quot;r&quot;:98}\', \'{&quot;cx&quot;:3284,&quot;cy&quot;:1706,&quot;r&quot;:81}\', \'{&quot;cx&quot;:4260,&quot;cy&quot;:1611,&quot;r&quot;:97}\', \'{&quot;cx&quot;:3350,&quot;cy&quot;:1632,&quot;r&quot;:60}\', \'{&quot;cx&quot;:3475,&quot;cy&quot;:1586,&quot;r&quot;:77}\', \'{&quot;cx&quot;:4243,&quot;cy&quot;:1474,&quot;r&quot;:87}\']'

# 替换HTML实体
processed_str = raw_str.replace('&quot;', '"')
# 用ast解析成字符串列表
str_list = ast.literal_eval(processed_str)
# 逐个将字符串解析为字典
result = [json.loads(item) for item in str_list]

# 验证结果
print(result)

两种方案对比:

  • 方案一流程直观,适合简单场景,但如果字符串结构有变动,可能需要调整预处理逻辑
  • 方案二更健壮,ast能处理各种转义情况,适配复杂格式的字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:46:03