JavaScript中如何将Python传入的字典格式字符串转换为对象
问题根本原因
你拿到的字符串不是标准JSON格式:
- 标准JSON要求所有字符串(包括对象的键、字符串值)必须使用双引号包裹,而你收到的字符串里用的是单引号
- Python直接把字典
str()序列化输出的格式本身就不符合JSON规范,所以JSON.parse才会抛出单引号的语法错误。
最优解决方案:修改Python端序列化逻辑
不要直接把Python字典转成字符串输出,用Python内置的json模块序列化,输出标准JSON格式:
import json # 假设你的字典是url_map url_map = { 'AMARAJABAT': 'https://kite.zerodha.com/chart/ext/tvc/NFO-OPT/AMARAJABAT21SEP710CE/15738370', 'ASIANPAINT': 'https://kite.zerodha.com/chart/ext/tvc/NFO-OPT/ASIANPAINT21SEP3300CE/16292866', 'ASTRAL': 'https://kite.zerodha.com/chart/ext/tvc/NFO-OPT/ASTRAL21SEP2100CE/15201026', 'AXISBANK': 'https://kite.zerodha.com/chart/ext/tvc/NFO-OPT/AXISBANK21SEP800CE/16441858' } # 输出标准JSON,不要用str(url_map) output_str = json.dumps(url_map)
这样前端拿到的就是标准JSON字符串,直接用JSON.parse就能正常解析。
临时兼容方案:前端手动替换单引号
如果实在没法改Python端的输出,你可以先把字符串里的所有单引号替换成双引号,再调用JSON.parse:
eventSource.addEventListener("online", function(e) { let data = e.data console.log(data) console.log(typeof(data)) // 先替换所有单引号为双引号,再解析 let formattedData = data.replace(/'/g, '"') let obj = JSON.parse(formattedData) console.log(obj) }, true)
注意:这个方案仅适用于你的字符串内容里本身不包含单引号的场景,如果你的URL或者键里有单引号,替换会导致新的语法错误,所以优先选择修改Python端序列化逻辑的方案。
内容的提问来源于stack exchange,提问作者viraj mane
相关产品推荐
相关产品推荐

