Dado que su cadena es malformada JSON, un analizador JSON no puede analizarlo correctamente e incluso eval() lanzará un error. Tampoco es un Array, sino un HashMap o simplemente un Object literal (malformado). Si el literal del objeto solo contendrá valores numéricos y de cadena (y ningún objeto/matriz hijo) puede usar el siguiente código.
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'}]
Ese código convertirá su cadena en una matriz de objetos (plural).
Sin embargo, si en realidad quería un HashMap (matriz asociativa) y no una matriz, utilice el siguiente código:
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'}
El código anterior será mucho más complejo cuando se inicia objetos de anidación y matrices. Básicamente, tendría que volver a escribir JSON.js y JSON2.js para admitir JSON con formato incorrecto.
Considere también la siguiente opción, que todavía es mala, lo admito, pero marginalmente mejor que pegar JSON dentro de un atributo de etiqueta HTML.
<div id="DATA001">bla</div>
<!-- namespacing your data is even better! -->
<script>var DATA001 = {a:12,b:"c",foo:"bar"};</script>
Te estoy asumiendo omiten las comillas en la cadena, ya que ha ponerlo dentro de un atributo de una etiqueta HTML y no quería escapar comillas.
¿Cómo sería esta matriz? –
Eso se parece mucho a JSON. Eso ya es muy parecido a una matriz asociativa y se puede acceder como tal. ¿Estás consciente de esto? [Mira aquí] (http://www.hunlock.com/blogs/Mastering_JSON_ (_JavaScript_Object_Notation_% 29). – BalusC
No es una matriz. Es una sola cadena. Acabo de recibir esta cadena del atributo de etiqueta. Y quiero convertir esto string a una matriz. – Zeck