在Crystal Lang中处理JSON::Any中的NIL问题

用Crystal开发时的一个挑战是,它不像Python或Ruby那样对数据类型有宽容度。

会让你忙得不可开交。

以下是错误信息。

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

可以通过以下方式解决。

# 转换成字符串,然后检查它是否为零
如果!(shopify_data[spid]["billing_address"]["address2"].as_s? ==nil)
     name = shopify_data[spid]["billing_address"]["address2"].as_s
否则
     name = "fallback_failed [taxgod]"
     tg_info << "shopify_data[spid][\"billing_address\"][\"address2\"] for " + spid + " is nil "                                       
结束

(以上是我的内部应用程序taxgod的片段,它与Shopify API对话--它将返回JSON数据,其中一些JSON数据可能是空的/无的)。

在这种情况下,使用as_s? 将JSON::Any类型转换为字符串或nil,然后检查它是否为nil。如果它不是nil,那么你可以继续使用 如_s cast(如果底层值为nil,则会引发),如果为nil,则设置一个替代值。