Trattare con NIL in JSON::Any in Crystal Lang

Una delle sfide quando si sviluppa con Crystal è che non è così indulgente sui tipi di dati come, ad esempio, Python o Ruby.

nil vi terrà occupati.

Il seguente messaggio di errore:

cast da Nil a String fallito, in /usr/share/crystal/src/json/any.cr:220:5:220

può essere risolto da:

# lanciare in una stringa, QUINDI controllare se è nullo
if !(shopify_data[spid]["billing_address"]["address2"].as_s? == nil)
     nome = shopify_data[spid]["billing_address"]["address2"].as_s
else
     nome = "fallback_failed [taxgod]"
     tg_info << "shopify_data[spid][\"billing_address\"][\"address2\"] per " + spid + " è nil "                                       
fine

(Quanto sopra è uno snipped dalla mia applicazione interna taxgod, che parla con l'API Shopify - che restituirà dati JSON, e alcuni di questi dati JSON potrebbero essere vuoti / nulli).

Come nel caso, usate as_s? per lanciare il tipo JSON::Any in una stringa o nil, e poi controllate se è nil. Se non è nil, allora potete procedere con un come_s (che solleva se il valore sottostante è nullo), e imposta un valore alternativo se è nullo.