Parsing/manipulating 格式奇怪的 json 数组

Parsing/manipulating weirdly formated json array

我有以下损坏的 javascript json 字符串

[ 'some string's', 'inside, array', 60.4, 10.3, '' ]

我想将从网页的脚本部分抓取的这个损坏的 json 字符串解析为 javascript 数组 - 但如您所见,它无效 json .字符串是单引号的,字符串内也可以有单引号。所以我需要用双引号替换字符串项周围的单引号,而不更改字符串内的单引号。

这里有正则表达式魔术师吗?

更新: 字符串也可以包含逗号,项目也可以是数字。

提示: 寻找模式 ', ' 来分隔字符串项可能有效。

假设您的 "bad" JSON 字符串总是以 [ ' 开头并以 ' ] 结尾,我们可以先 "trim" 字符串,然后使用', '.

    var str = "[ 'some string's', 76, 'inside, array', '', 60.4, 10.3, '', 56 ]";
    str = str.replace(/^\[ | \]$/g, '')
    var re = /'(.*?)'(?=,|$)|(\d+(?:\.\d+)?)(?=,|$)/g; 
    var m;
    arr = [];
    
    while ((m = re.exec(str)) !== null) {
        if (m.index === re.lastIndex) {
            re.lastIndex++;
        }
        if (m[1] != undefined) {
           arr.push(m[1]);
           document.getElementById("res").innerHTML += m[1] + "<br/>";
        }
        else
        {
           arr.push(m[2]);
           document.getElementById("res").innerHTML += m[2] + "<br/>";
        }
    }
    alert(arr);
<div id="res"/>

但是,请注意,修复 JSON 的最佳方法是在 JSON 提供商方面进行修复。如果您有更复杂的 JSON 字符串,此解决方案将需要改进。