Оператор []
действителен только для JsonValue
объектов, которые относятся к типу Object
или null. Все остальные (Int
, Bool
, Array
и т. Д.) Будут утверждать.
Если UserRoot0
объекта является Array
или каким-либо другой не- Object
типа, у вас есть еще немного поработать (как итерацию в подузлы), чтобы найти свой целевой узел, который может или не может содержать ошибку. Распечатайте UserRoot0.toStyledString()
, чтобы увидеть, как выглядит ваш JSON, и убедитесь, что он похож на объект JSON (см. json.org для приятного обзора того, что это такое).
Комментарий «ToDo» в верхней части исходного файла json_value.cpp (где определено JSON_ASSERT
) подразумевает, что разработчики могут планировать более надежную обработку ошибок вместо этих утверждений в будущих версиях, но тем временем вы может проверить себя, как это:
if(UserRoot0.isObject() && UserRoot0.isMember("error"))
// Process error node
else
// This node isn't an Object node or doesn't contain the "error" key
isMember()
чек будет также утверждать, для не Object
узлов, так что не забудьте проверить isObject()
перед проверкой isMember()
если UserRoot0
не гарантируется быть Object
.
Существует новая настройка, [ 'failIfExtra'] (http://open-source-parsers.github.io/jsoncpp-docs/doxygen/class_json_1_1_char_reader_builder.html#ac69b7911ad64c171c51ebaf2ea26d958), который поймает эту общую ошибку. Он также является частью 'strictMode()'. – cdunn2001