Tratando con NIL en JSON::Any en Crystal Lang
Uno de los retos al desarrollar con Crystal es que no es tan indulgente con los tipos de datos como, por ejemplo, Python o Ruby.
nil te mantendrá ocupado.
El siguiente mensaje de error:
cast from Nil to String failed, at /usr/share/crystal/src/json/any.cr:220:5:220
puede ser resuelto por:
# cast to string, THEN check if it is nil
if !(shopify_data[spid]["billing_address"]["address2"].as_s? == nil)
name = shopify_data[spid]["billing_address"]["address2"].as_s
si no
name = "fallback_failed [taxgod]"
tg_info << "shopify_data[spid][\ "billing_address\"][\ "address2\"] para " + spid + " es nil "
fin
(Lo anterior es un recorte de mi aplicación interna taxgod, que habla con la API de Shopify - que devolverá datos JSON, y algunos de estos datos JSON podrían estar vacíos / nulos).
Como es el caso, utiliza as_s? para convertir el tipo JSON::Any en una cadena o nil, y luego comprueba si es nil. Si no es nil, entonces puedes proceder con un as_s (que se elevará si el valor subyacente es nil ), y establecerá un valor alternativo si es nil.