Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

349
Visualizações
¿Cómo adaptar JSON.Parser para NaN en Javascript?

Estoy tratando de adaptar JSON.Parse() para NaN.

 console.log(JSON.parse('{"n": 1}')); console.log(JSON.parse('{"n": NaN}'));

El primero es {n:1}.

El segundo tiene un error que dice Unexpected token N in JSON . Y quiero cambiar NaN a 0 como {n: 0} .

Encontré un recurso que crea JSON Parser desde cero. https://lihautan.com/json-parser-with-javascript/#implementing-the-parser

Es bueno que separe las claves y los valores para que pueda verificar solo los valores si hay NaN y arreglarlo. Pero el problema es que no tengo idea de dónde puedo poner el NaNParser() y el proceso. Porque el parámetro parece venir 1 por 1 carácter.

Si pudieras darme un consejo, me sería de gran ayuda. https://codesandbox.io/s/json-parser-with-error-handling-hjwxk?from-embed

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Contexto

Tenga en cuenta que JSON.stringify({"n": NaN}) genera: '{"n":null}'

Eso significa:

  • NaN no es un valor serializado válido.
  • por defecto se convierte en null , no en 0 (porque no es un número)

Solución

Quizás el enfoque más rápido es simplemente reemplazar todos los valores de NaN antes de analizarlos.

 const input = '{"o": 1, "n": NaN, "m": "test"}' const output = input.replace(/(:\s*)NaN(\s*[,}])/, '$1null$2') console.log(output) // prints: '{"o": 1, "n": null, "m": "test"}'

Alternativamente, podría usar sed en la terminal:

 sed -e "s/pattern/replacement/g" <input.txt >output.txt
about 4 years ago · Juan Pablo Isaza Relatório

0

Solución "hacky":

 var json = '{"n": NaN}'; var object = JSON.parse(json.replace("NaN", "\"NaN\"")); for(var key in object) { if(object[key] == "NaN") { object[key] = NaN; } } console.log(object);

Esto reemplaza todos los valores de NaN en el JSON con la cadena "NaN", luego lo ejecuta a través de JSON.parse y luego vuelve a reemplazar toda la cadena "NaN" en el objeto con NaN real.

about 4 years ago · Juan Pablo Isaza Relatório

0

Si necesita producir JSON con valores cero en lugares donde NaN estaba en la fuente, puede usar un serializador bastante simple ("reemplazo") durante JSON.stringify

 console.log( JSON.stringify( // source data: { a: 1, b: NaN }, // "replacer": function(key, value) { if (Number.isNaN(value)) { return 0 } return value }, // optional, indent character for formatting: "\t" ) )

Para preservar los valores de NaN , debe proporcionar un reemplazo personalizado que produzca una estructura única que lo represente en una cadena JSON sintácticamente válida, y usar un "revividor" adecuado mientras JSON.parse para recuperarlo:

 var original_data = { a: 1, NaN: NaN, NaNaNaNa: { Batman: true, baNaNa: NaN, } } const extra_type_value_key = "__value__"; const NaN_signal = "NaN, dude"; const NaN_representation = { [extra_type_value_key]: NaN_signal }; function replacer(key, value) { if (Number.isNaN(value)) { return NaN_representation; } return value } const data_JSON_string = JSON.stringify(original_data, replacer, "\t"); console.log("Data as JSON string:", data_JSON_string); function reviver(key, value) { if (value && value[extra_type_value_key] && value[extra_type_value_key] === NaN_signal) { return NaN } return value } const data_POJO = JSON.parse(data_JSON_string, reviver, "\t"); console.log("Object from JSON string, should be same as original_data", data_POJO); // unrelated onload=()=>{with(document.querySelector('div').style)top=0,maxHeight='none'}

Además, para un propósito similar, el uso de la práctica oscura de la eval malvada de una cadena similar a JSON funcionaría:

 var original_data_string = `{ a: 1, b: NaN, NaNaNa: { Batman: NaN, baNaNa: 3, NaN: 4 } }`; var data_object = eval(`(${original_data_string})`); console.log(data_object);


Por el amor de Dios, no haga reemplazos de expresiones regulares en cadenas fuente JSON, ¡especialmente si no conoce la forma de los datos!

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda