1

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

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

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

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

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

提示:寻找', '分隔字符串项的模式可能会起作用。

4

1 回答 1

1

假设您的“坏”JSON 字符串始终以 开头[ '和结尾' ],我们可以先“修剪”字符串,然后使用', '.

    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 字符串,则需要增强此解决方案。

于 2015-05-25T12:09:42.207 回答