在Dart/Flutter中如何将非标准JSON字符串转换为标准JSON格式?
非标准JSON转标准JSON的实现方案
针对输入的非标准JSON字符串(键和字符串值未用双引号包裹):
{authToken: msadnmsandnasdn}
转换为标准JSON格式:
{"authToken": "msadnmsandnasdn"}
以下是几种可行的实现方案:
1. 正则表达式替换(通用轻量方案)
通过正则匹配未加引号的键和值,替换为带双引号的格式,适合结构简单的场景:
Python示例
import re non_standard = "{authToken: msadnmsandnasdn}" # 为键添加双引号 key_fixed = re.sub(r'(\w+)(?=\:)', r'"\1"', non_standard) # 为值添加双引号 standard_json = re.sub(r'(?<=\:)\s*(\w+)(?=\}|,)', r' "\1"', key_fixed) print(standard_json)
JavaScript示例
const nonStandard = '{authToken: msadnmsandnasdn}'; const keyFixed = nonStandard.replace(/(\w+)(?=\:)/g, '"$1"'); const standardJson = keyFixed.replace(/(?<=\:)\s*(\w+)(?=\}|,)/g, ' "$1"'); console.log(standardJson);
2. 专用库解析(健壮方案)
如果涉及复杂的非标准JSON(含特殊字符、嵌套结构等),推荐使用支持宽松JSON解析的专用库:
Python:使用demjson
先安装依赖:
pip install demjson
代码实现:
import demjson non_standard = "{authToken: msadnmsandnasdn}" # 解析非标准JSON为Python对象,再序列化为标准JSON standard_json = demjson.encode(demjson.decode(non_standard)) print(standard_json)
JavaScript:使用json5
先安装依赖:
npm install json5
代码实现:
const JSON5 = require('json5'); const nonStandard = '{authToken: msadnmsandnasdn}'; const standardJson = JSON.stringify(JSON5.parse(nonStandard)); console.log(standardJson);
3. JavaScript快速方案(仅信任输入时使用)
如果能确保输入安全无恶意代码,可以用eval配合JSON.stringify快速转换:
const nonStandard = '{authToken: msadnmsandnasdn}'; const standardJson = JSON.stringify(eval(`(${nonStandard})`)); console.log(standardJson);
内容的提问来源于stack exchange,提问作者Dhaval Chaudhari
相关产品推荐
相关产品推荐

