Поскольку ваша строка искажена JSON, анализатор JSON не может ее правильно проанализировать, и даже eval () выдаст ошибку. Это также не массив, а HashMap или просто литерал объекта (неправильный). Если литерал 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-тега и не хотите экранировать кавычки.