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.