Tengo una cuerda
str = "{'a':1}";
JSON.parse(str);
VM514:1 Uncaught SyntaxError: Unexpected token '(…)
¿Cómo puedo analizar la cadena anterior (str) en un objeto JSON?
Esto parece un análisis simple. Sin embargo, no está funcionando.
Tengo una cuerda
str = "{'a':1}";
JSON.parse(str);
VM514:1 Uncaught SyntaxError: Unexpected token '(…)
¿Cómo puedo analizar la cadena anterior (str) en un objeto JSON?
Esto parece un análisis simple. Sin embargo, no está funcionando.
var str = "bad example";
no es una buena práctica, mejor haga lo siguiente: var str = 'good example';
=> así no tendrá ningún problema con JSON y tampoco tendrá problemas con HTML. :)
Respuestas:
El estándar JSON requiere comillas dobles y no aceptará comillas simples, ni tampoco el analizador.
Si tiene un caso simple sin comillas simples de escape en sus cadenas (lo que normalmente sería imposible, pero esto no es JSON), puede str.replace(/'/g, '"')
hacerlo de manera simple y debería terminar con JSON válido.
'title': "Mama's Friend"
se convertirá "title": "Mama"s Friend"
, lo que por supuesto no es válido. Debería votar en contra de su respuesta, pero estoy en contra. Este comentario vale mucho más.
Sé que es una publicación antigua, pero puedes usar JSON5 para este propósito.
<script src="json5.js"></script>
<script>JSON.stringify(JSON5.parse('{a:1}'))</script>
{'section': "24'"}
que se convierte en: {"section": "24""}
y no se analizará.
<script>JSON.stringify(some_jsonString)</script>
Si está seguro de que su JSON está bajo su control de forma segura (no la entrada del usuario), simplemente puede evaluar el JSON. Eval acepta todos los tipos de citas, así como los nombres de propiedades sin comillas.
var str = "{'a':1}";
var myObject = (0, eval)('(' + str + ')');
Los paréntesis adicionales son necesarios debido a cómo funciona el analizador eval. Eval no es malo cuando se usa en datos sobre los que tiene control. Para obtener más información sobre la diferencia entre JSON.parse y eval (), consulte JSON.parse frente a eval ()
var str = "{'a':1}";
str = str.replace(/'/g, '"')
obj = JSON.parse(str);
console.log(obj);
Esto resolvió mi problema.
{'a':"A'A"}
se convertirá en{"a":"A"A"}
Algo como esto:
var div = document.getElementById("result");
var str = "{'a':1}";
str = str.replace(/\'/g, '"');
var parsed = JSON.parse(str);
console.log(parsed);
div.innerText = parsed.a;
<div id="result"></div>
No se permite el uso de comillas simples para las claves en JSON. Debe utilizar comillas dobles.
Para su caso de uso, tal vez esta sea la solución más fácil:
str = '{"a":1}';
Fuente :
Si una propiedad requiere comillas, se deben usar comillas dobles. Todos los nombres de propiedad deben estar entre comillas dobles.
json = ( new Function("return " + jsonString) )();
Function
lugar de eval es correcto, pero todo lo demás está mal. Debería servar json = Function("'use strict';return " + jsonString)()