Recibí este error y no pude encontrar ninguna respuesta razonable a esta pregunta, así que pensé en escribir un resumen del problema.Un texto JSON debe contener al menos dos octetos
Si ejecuta este fragmento en el IRB:
JSON.parse(nil)
Vas a ver el siguiente error:
TypeError: can't convert nil into String
yo era una especie de esperar que la función devuelva nil
, y no un TypeError
. Si convierte todas las entradas utilizando to_s
, entonces usted verá el error del octeto:
JSON::ParserError: A JSON text must at least contain two octets!
Eso está muy bien y bien. Si usted no sabe lo que es un octeto, leer este post para un resumen y una solución: What is a JSON octet and why are two required?
Solución
La variable que está pasando es una cadena vacía. No intente utilizar una cadena vacía en el método JSON.parse
.
Pregunta
Por lo tanto, ahora sé la causa del error, qué patrón se debe utilizar para manejar esto? Estoy un poco reacio a parchear mono la biblioteca JSON para permitir nil
valores. Cualquier sugerencia sería muy apreciada.
Posiblemente debido al hecho de que una cadena javascript válida MÍNIMA absoluta es '" "', que es dos octetos (y el objeto mínimo absoluto es '{}'). Podría ser quien escribió que el codificador/analizador no consideró que 'null' también es un valor válido de JavaScript. –