2014-11-18 5 views
0

Предположим, у меня есть неизвестное немного JSON, и я хочу, чтобы проверить, если он имеет форму, подобную этой:std.json - Любой способ проверить, если JSONValue имеет определенное поле

{ 
    "foo": stuff 
    "bar": stuff 
} 

где stuff есть что-то - целое, объект, что угодно. Если я сделаю что-то вроде этого:

Я получу segfault. Есть ли способ изящно справиться с этим (вернуть null, throw exception, что-нибудь, кроме segfault)?

ответ

3

Просто используйте оператор D in, как с D ассоциативного массива:

auto foo = "foo" in json ? json["foo"].str : null; 

Если вы используете DMD 2.065 или старше, вам нужно использовать json.object для in оператора:

auto foo = "foo" in json.object ? json["foo"].str : null; 
+0

Моему компилятору это не очень нравится - эта строка дает ошибку '' значение r в выражении должно быть ассоциативным массивом, а не JSONValue''. –

+2

Попробуйте '' foo "в json.object', затем. –

+1

Это сработало, спасибо! Не могли бы вы отредактировать свой ответ, чтобы другие люди не допустили моей ошибки? –

Смежные вопросы