最近写React,需要转JSON,单引号和双引号问题
JSON.parse()不能转换单引号,这一点很崩溃,最开始选择用正则表达式,因为输出的数据里面的单引号需要保留,所以只能打补丁式的转:
let fixed = genChart
// 1. 修复键名的单引号:'key': -> "key":
.replace(/'([a-zA-Z0-9_]+)':/g, '"$1":')
// 2. 修复字符串值的单引号:: 'value' -> : "value"
.replace(/:\s*'([^']*)'/g, ':"$1"')
// 3. 修复没有引号的键名:key: -> "key":
.replace(/([{,])\s*([a-zA-Z0-9_]+)\s*:/g, '$1"$2":');
console.log("fixed:", fixed);
setOptions(JSON.parse(fixed));
后面发现不行,我的数据里面还会有数组,['','']这种格式它不会转!打补丁不可行,后面还会有很多问题。不过还是将正则表达式改了:
let fixed = genChart
// 1. Quote unquoted keys first (e.g. key: -> "key":)
.replace(/([{,])\s*([a-zA-Z0-9_]+)\s*:/g, '$1"$2":')
// 2. Safely replace single quotes with double quotes anywhere they enclose a value or key
.replace(/'([^'\\]*(\\.[^'\\]*)*)'/g, '"$1"');
console.log("fixed:", fixed);
setOptions(JSON.parse(fixed));
问了一下AI,AI说用JSON5。。。JSON5支持单引号格式转换。
import JSON5 from 'json5';
let fixed = genChart;
console.log("fixed:", fixed);
setOptions(JSON5.parse(fixed));

浙公网安备 33010602011771号