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

如何将字符串转换为字典?json.loads解析失败的解决方法

解决字符串转字典/JSON对象的问题

这个坑我踩过!你用json.loads()失败的原因很明确:你的字符串不符合标准JSON格式——JSON严格要求对象的键必须用双引号包裹,字符串值也得是双引号,而你给出的字符串里lat、lng这两个键没有加引号,值用的还是单引号,这直接触发了解析错误。

下面给你两个可行的解决办法:

方法1:正则修正格式后用json.loads()解析

先通过正则给无引号的键加上双引号,再把单引号替换成双引号,让字符串符合JSON规范,之后就能正常解析了:

import json
import re

# 你的原始字符串
coordinates = "{ lat: '55,7303650017903', lng: '12,3446636123658' }"

# 步骤1:给没有引号的键添加双引号
fixed_json_str = re.sub(r'(\w+):', r'"\1":', coordinates)
# 步骤2:把单引号替换为双引号
fixed_json_str = fixed_json_str.replace("'", '"')

# 现在可以正常解析成JSON对象(Python字典)
parsed_coords = json.loads(fixed_json_str)
print(parsed_coords)
# 输出结果:{'lat': '55,7303650017903', 'lng': '12,3446636123658'}

正则说明

(\w+):会匹配所有类似lat:、lng:的键名部分,\1引用匹配到的键名,替换成"lat":这种带双引号的格式,完美解决JSON键的格式要求。

方法2:用ast.literal_eval解析(更适配Python语法)

如果你更习惯Python的字典语法,也可以用ast.literal_eval——它能解析符合Python字面量规则的字符串,不过同样需要先给键加上引号(Python字典的字符串键必须加引号):

import ast
import re

coordinates = "{ lat: '55,7303650017903', lng: '12,3446636123658' }"

# 给键加上单引号,适配Python字典格式
fixed_py_str = re.sub(r'(\w+):', r"'\1':", coordinates)

# 解析为Python字典
parsed_coords = ast.literal_eval(fixed_py_str)
print(parsed_coords)
# 输出结果:{'lat': '55,7303650017903', 'lng': '12,3446636123658'}

ast.literal_eval比json.loads更灵活,但只适合解析Python原生类型的字面量,安全性也更高(不会执行恶意代码)。

额外补充:处理数值里的逗号

注意到你数值里用的是逗号(比如55,730365...),如果这是小数点的笔误,你可以在解析后替换并转成数值类型:

# 把逗号替换成小数点并转成浮点数
parsed_coords['lat'] = float(parsed_coords['lat'].replace(',', '.'))
parsed_coords['lng'] = float(parsed_coords['lng'].replace(',', '.'))
print(parsed_coords)
# 输出结果:{'lat': 55.7303650017903, 'lng': 12.3446636123658}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:57:33