Encontré un error muy extraño. Si ejecuto JSON.Parse('[""d""]'), aparece el error: "Token d inesperado en JSON en la posición 3"
JSON.parse('["\"d\""]')Si ejecuto console.log(JSON.stringify(['"d"'])) obtengo '[""d""]'
console.log(JSON.stringify(['"d"']))Si ejecuto console.log(JSON.parse(JSON.stringify(['"d"']))) obtengo un buen resultado [""d""]
console.log(JSON.parse(JSON.stringify(['"d"'])))Si utilizo la función de evaluación, aparece el error: "Error de sintaxis no detectado: token d inesperado en JSON en la posición 3"
var someJson=JSON.stringify(['"d"']); window.eval(`JSON.parse('${someJson}')`)¿Cómo arreglarlo?
Uso alguna biblioteca externa y hay window.eval( JSON.parse('${JSON.stringify(t)}')) ). Donde t - matriz json con cadenas. La cadena puede contener comillas dobles. Lanza una excepción.
Encontré que js cambió el valor de mi cadena cuando lo configuré.
var someJson='["\"d\""]'; console.log(someJson);Devuelve '[""d""]' y cuando ejecuto JSON. Parse es JSON incorrecto.
¿Cómo arreglarlo?
JSON.parse('["\"d\""]')
\ es un carácter especial en las cadenas JS, por lo que para incluirlo en su JSON debe escaparlo.
const yourString = '["\"d\""]'; const validJSON = '["\\"d\\""]' const parsedData = JSON.parse(validJSON); document.querySelector('#yourString').value = yourString; document.querySelector('#validJSON').value = validJSON; <p>Your string: <output id="yourString"></output> <p>Valid JSON: <output id="validJSON"></output>Como regla general, incrustar JSON en cadenas literales es una pérdida de tiempo y esfuerzo. Simplemente puede escribir la estructura de datos JS que obtiene al analizar el JSON.
@Quentin muchas gracias por la idea! Resultado respuesta para mí:
var someJson=JSON.stringify(['"d"']); console.log(window.eval(`JSON.parse('${someJson.replaceAll('\\','\\\\')}')`))