Omgaan met NIL in JSON::Any in Crystal Lang

Een van de uitdagingen bij het ontwikkelen met Crystal is dat het niet zo vergevingsgezind is met betrekking tot datatypes als, laten we zeggen, Python of Ruby.

nihil zal je bezig houden.

De volgende foutmelding:

cast van Nil naar String mislukt, in /usr/share/crystal/src/json/any.cr:220:5:220

kan worden opgelost door:

# cast naar string, DAN controleren of het nihil is
if !(shopify_data[spid]["billing_address"]["address2"].as_s? == nil)
     naam = shopify_data[spid]["billing_address"]["address2"].as_s
anders
     name = "fallback_failed [taxgod]"
     tg_info << "shopify_data[spid][\"factuur_adres"][\"adres2"] voor " + spid + " is nihil "                                       
einde

(Het bovenstaande is een stukje uit mijn interne applicatie taxgod, die praat met de Shopify API - die JSON-gegevens zal retourneren, en sommige van deze JSON-gegevens kunnen leeg / nihil zijn).

Zoals het geval is, gebruik as_s? om het JSON::Any type te casten naar een string of nil, en controleer dan of het nil is. Als het niet nil is, dan kun je verder gaan met een als_s cast (die zal verhogen als de onderliggende waarde nul is), en stel een alternatieve waarde in als die nul is.