如何将JS对象字符串解析为Python列表?遇JSON解码错误且无法使用JS
解析JS对象字符串为Python列表的方法
你遇到的问题是因为这段JS对象字符串不符合严格的JSON规范,json.loads只能解析标准JSON,所以会报错。以下是两种可行的解决方法:
方法一:手动正则修正后用json.loads
通过正则替换把JS对象转换成标准JSON格式,再用Python内置的json模块解析:
import re import json # 你的原始JS字符串 js_str = """[{label: ' ', name: 'Confirmed', width: 30, formatter: 'checkbox'},{label: 'ID', name: 'ID', width: 100, key:true},{label: 'E-mail', name: 'F250275', width: null, formatter: clearText},{label: 'Agree', name: 'F250386', width: null, formatter: clearText},]""" # 1. 给所有属性名添加双引号 fixed_str = re.sub(r'\b(\w+):', r'"$1":', js_str) # 2. 将未加引号的clearText转为字符串 fixed_str = re.sub(r'\b(clearText)\b', r'"$1"', fixed_str) # 3. 移除末尾多余的逗号 fixed_str = re.sub(r'},]', r'}]', fixed_str) # 解析为Python列表 result = json.loads(fixed_str) print(result)
方法二:使用第三方库直接解析非标准JSON
demjson库支持解析JS风格的对象(无需严格符合JSON规范),步骤如下:
- 安装库:
pip install demjson
- 解析代码:
import demjson js_str = """[{label: ' ', name: 'Confirmed', width: 30, formatter: 'checkbox'},{label: 'ID', name: 'ID', width: 100, key:true},{label: 'E-mail', name: 'F250275', width: null, formatter: clearText},{label: 'Agree', name: 'F250386', width: null, formatter: clearText},]""" result = demjson.decode(js_str) print(result)
补充说明:
json.loads报错的核心原因是JSON语法要求属性名必须用双引号包裹,且所有非数值/布尔/null的值必须是双引号字符串,而你的JS对象里属性名无引号、clearText是未加引号的标识符,不符合JSON规范。
内容的提问来源于stack exchange,提问作者Headmaster
相关产品推荐
相关产品推荐

