Hay muchas fuentes sobre cómo hacerlo en Javascript, pero parece que no es tan simple en Typescript. Quiero verificar si una cadena es un JSON válido, probé el siguiente código:
function isJSON(str) { try { JSON.parse(str); } catch (e) { return false; } return true; }Pero no importa qué cadena intente, no arroja un error, incluso una cadena aleatoria como "[asc, 22"
También he probado esto:
function testJSON(strJson) { try { const parsed = JSON.parse(strJson) if (parsed && typeof parsed === "object") { return true } } catch { return false } return false }Pero en este caso devuelve falso sin importar qué cadena se use, no entiendo por qué, pero la función JSON.parse() siempre devuelve una cadena sin importar lo que le pase.
Quiero que la función tenga resultados como este:
"123" => false "abc" => false "{ "prop_1": "val_1", "prop_2": "val_2" }" => true "{ prop_1: "val_1", "prop_2": "val_2" }" => falseEDITAR: Esto SÍ funciona en Typescript después de verificar en la plataforma en línea typescriptlang.org, no estoy seguro de si podría ser un problema en ReactJS, el archivo en el que estoy trabajando es de tipo .tsx
EDICIÓN 2: resultó que el problema no estaba relacionado con el mecanografiado o la reacción, pero el código estaba usando incorrectamente en otro lugar el método "JSON.stringify", la respuesta se publicó a continuación.
Resultó que la segunda función que mencioné en la pregunta funciona después de todo de acuerdo con lo que necesitaba, lo que sucedía es que en lo profundo de mi código, la entrada que era una cadena se encadenaba nuevamente antes de pasar al método, eso significaba que cuando lo estaba analizando, siempre devolvía una cadena y nunca arrojaba un error. Mi error es no notar el JSON.stringify y no entender bien su comportamiento.
La respuesta correcta a esta pregunta sería entonces como se menciona en la pregunta:
function testJSON(strJson) { try { const parsed = JSON.parse(strJson) if (parsed && typeof parsed === "object") { return true } } catch { return false } return false }JSON.parse() throw una excepción si la entrada no es correcta, solo lo está capturando en el bloque catch , verifique ejecutando el fragmento a continuación.
console.log(JSON.parse("sqdfq["));Tenías razón, pero para mostrar un buen/mal ejemplo aquí va.
let badJSON = `'""{bad bad}"'"`; let goodJSON = `{"type":"pong"}`; let CheckJSON = (Data) => { try { let message = JSON.parse(Data); if (message.type == "pong") { console.log("PING"); } } catch (e) { console.warn("close:"); } }; CheckJSON(goodJSON); CheckJSON(badJSON); https://stackoverflow.com/questions/70384627/check-if-a-string-is-a-valid-json-in-typescript#