Traitement de NIL dans JSON::Any en Crystal Lang

L'un des défis du développement avec Crystal est qu'il n'est pas aussi indulgent avec les types de données que, par exemple, Python ou Ruby.

néant vous occupera.

Le message d'erreur suivant :

cast from Nil to String failed, at /usr/share/crystal/src/json/any.cr:220:5:220

peut être résolu par :

# convertir en chaîne de caractères, PUIS vérifier si elle est nulle.
si !(shopify_data[spid]["billing_address"]["address2"].as_s ? == nil)
     name = shopify_data[spid]["billing_address"]["address2"].as_s
sinon
     name = "fallback_failed [taxgod]"
     tg_info << "shopify_data[spid][\"billing_address\"][\"address2\"] for " + spid + " is nil "                                       
fin

(Ce qui précède est un extrait de mon application interne taxgod, qui communique avec l'API Shopify - qui renvoie des données JSON, et certaines de ces données JSON peuvent être vides / nulles).

Dans le cas présent, utilisez as_s ? pour convertir le type JSON::Any en une chaîne de caractères ou en nil, puis vérifiez si c'est nil. Si ce n'est pas le cas, vous pouvez poursuivre avec une commande as_s cast (qui sera levé si la valeur sous-jacente est nulle), et définit une valeur alternative si elle est nulle.