由于您的字符串是格式错误 JSON,因此 JSON 解析器无法正确解析它,甚至 eval() 也会抛出错误。它也不是一个 Array 而是一个 HashMap 或者只是一个 Object 文字(格式错误)。如果 Object 文字只包含数字和字符串值(并且没有子对象/数组),您可以使用以下代码。
function malformedJSON2Array (tar) {
var arr = [];
tar = tar.replace(/^\{|\}$/g,'').split(',');
for(var i=0,cur,pair;cur=tar[i];i++){
arr[i] = {};
pair = cur.split(':');
arr[i][pair[0]] = /^\d*$/.test(pair[1]) ? +pair[1] : pair[1];
}
return arr;
}
malformedJSON2Array("{a:12, b:c, foo:bar}");
// result -> [{a:12},{b:'c'},{foo:'bar'}]
该代码会将您的字符串转换为对象数组(复数)。
如果您实际上想要一个 HashMap(关联数组)而不是数组,请使用以下代码:
function malformedJSON2Object(tar) {
var obj = {};
tar = tar.replace(/^\{|\}$/g,'').split(',');
for(var i=0,cur,pair;cur=tar[i];i++){
pair = cur.split(':');
obj[pair[0]] = /^\d*$/.test(pair[1]) ? +pair[1] : pair[1];
}
return obj;
}
malformedJSON2Object("{a:12, b:c, foo:bar}");
// result -> {a:12,b:'c',foo:'bar'}
当你开始嵌套对象和数组时,上面的代码会变得复杂很多。基本上你必须重写 JSON.js 和 JSON2.js 来支持格式错误的 JSON。
还可以考虑以下选项,我承认这仍然很糟糕,但比将 JSON 粘贴在 HTML 标记的属性中要好一点。
<div id="DATA001">bla</div>
<!-- namespacing your data is even better! -->
<script>var DATA001 = {a:12,b:"c",foo:"bar"};</script>
我假设您在字符串中省略了引号,因为您已将它放在 HTML 标记的属性中并且不想转义引号。