Umgang mit NIL in JSON::Any in Crystal Lang

Eine der Herausforderungen bei der Entwicklung mit Crystal besteht darin, dass es bei Datentypen nicht so nachsichtig ist wie beispielsweise Python oder Ruby.

null wird Sie beschäftigen.

Die folgende Fehlermeldung:

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

kann gelöst werden durch:

# in String umwandeln, DANN prüfen, ob er Null ist
if !(shopify_data[spid]["billing_address"]["address2"].as_s? == nil)
     name = shopify_data[spid]["rechnungs_adresse"]["adresse2"].as_s
sonst
     name = "fallback_failed [taxgod]"
     tg_info << "shopify_data[spid][\"billing_address\"][\"address2\"] for " + spid + " is nil "                                       
Ende

(Das obige ist ein Ausschnitt aus meiner internen Anwendung taxgod, die mit der Shopify-API kommuniziert - die JSON-Daten zurückgibt, und einige dieser JSON-Daten können leer / null sein).

In diesem Fall verwenden Sie as_s?, um den JSON::Any-Typ in eine Zeichenkette oder nil umzuwandeln, und prüfen dann, ob er nil ist. Wenn es nicht nil ist, können Sie mit einer as_s cast (der ausgelöst wird, wenn der zugrundeliegende Wert gleich Null ist) und setzt einen alternativen Wert, wenn er gleich Null ist.