У меня есть этот gson JsonElement, который я пытаюсь разобрать. Возможно, что некоторые атрибуты этого элемента json не существуют, поэтому я пытаюсь использовать оператор Элвиса для предоставления значения по умолчанию (пустая строка) в случае, если части элемента json не существуют. Вот элемент json, который доставляет мне неприятности:
{"und":[{"value":null,"format":null,"safe_value":""}]}
Я пытаюсь извлечь из этого значения значение в виде строки. Если он нулевой, то я хочу установить по умолчанию пустую строку.
Вот как я это делаю ( примечание: этот json элемент называется phone
):
val tempPhone = phone?.asJsonObject?.get("und")?.asJsonArray?.get(0)?.asJsonObject?.get("value")?.asString ?: ""
Я разбил это шаг за шагом для отладки, и вот что показывает мой отладчик ( примечание: отладчик входит в систему ()
):
var undArr = phone?.asJsonObject?.get("und")?.asJsonArray debug: (undArr: "[{"value":null,"format":null,"safe_value":""}]")
var undObj = undArr?.get(0)?.asJsonObject debug: (undObj: "{"value":null,"format":null,"safe_value":""}")
var value = undVal?.get("value"). debug: (value: "null")
var valueString = value?.asString ?: ""
Ошибка происходит в последней строке. Из моего понимания оператора Элвиса, если value
равно null
, то var valueString = value?.asString ?: ""
должен просто установить valueString
в пустую строку. Вместо этого происходит исключение.
Разве это не правильная реализация оператора Элвиса? Я немного озадачен, почему это не получается.