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.