如何将文件中带单引号的Unicode JSON字符串转为有效JSON?
嘿,这个问题我太熟了——Python风格的字典字符串(带单引号和u前缀)和标准JSON就差一点点,但直接瞎替换很容易踩坑,给你几个靠谱的解决办法:
方法1:用Python的
ast模块(最安全通用) 这是我最推荐的方案,因为它能完美处理各种边界情况,比如字符串值里包含单引号、嵌套结构这些。原理是先把非标准的字符串解析成Python原生字典,再转成标准JSON:
import ast import json # 你的原始非标准JSON字符串 invalid_json_str = "{ u'key1':u'abc', u'key2':u\"I'm using single quotes inside\" }" # 解析为Python字典(ast.literal_eval会安全解析Python字面量,不会执行恶意代码) python_dict = ast.literal_eval(invalid_json_str) # 转成标准JSON字符串 valid_json_str = json.dumps(python_dict) print(valid_json_str) # 输出:{"key1": "abc", "key2": "I'm using single quotes inside"}
这个方法的优势在于,哪怕你的字符串里有转义字符、嵌套的字典/列表,或者值里包含单引号,都能正确处理,完全不用担心破坏JSON结构。
方法2:简单字符串替换(仅适用于极简场景)
如果你的字符串非常简单,没有嵌套结构,也没有值里包含单引号的情况,那可以直接做字符串替换应急:
invalid_json_str = "{ u'key1':u'abc' }" # 先去掉Python2的Unicode前缀u,再把所有单引号换成双引号 valid_json_str = invalid_json_str.replace("u'", "\"").replace("'", "\"") print(valid_json_str) # 输出:{"key1": "abc"}
⚠️ 注意:这个方法有很大局限性!如果你的值里有单引号(比如u"I'm here"),替换后会变成"I"m here",直接变成无效JSON,所以只适合完全确定没有内部单引号的简单场景。
方法3:第三方库
demjson(可选) 如果你能安装第三方库,demjson的解码方法可以直接识别这种非标准JSON:
import demjson invalid_json_str = "{ u'key1':u'abc' }" # 直接解析为Python对象 valid_json_obj = demjson.decode(invalid_json_str) # 转成标准JSON字符串 valid_json_str = demjson.encode(valid_json_obj)
不过需要先安装库:pip install demjson,但一般来说ast模块已经足够解决问题,没必要额外依赖第三方库。
内容的提问来源于stack exchange,提问作者Sagar Grover
相关产品推荐
相关产品推荐

