El operador []
solo es válido para objetos JsonValue
que son de tipo Object
o nulo. Todos los demás (Int
, Bool
, Array
, etc.) afirmarán.
Si el objeto es un UserRoot0
Array
o algún otro tipo no Object
, usted tiene más trabajo que hacer (como la iteración en sub-nodos) para encontrar su nodo de destino que pueden o no pueden contener el error. Imprima UserRoot0.toStyledString()
para ver cómo se ve su JSON, y asegúrese de que se ve como un Objeto JSON (consulte json.org para obtener una descripción general de lo que es).
Un comentario "ToDo" en la parte superior del archivo fuente json_value.cpp (donde JSON_ASSERT
está definido) implica que los desarrolladores pueden estar planeando un manejo de errores más robusto en lugar de estos asertos en versiones futuras, pero mientras tanto, puede comprobar usted mismo, de esta manera:
if(UserRoot0.isObject() && UserRoot0.isMember("error"))
// Process error node
else
// This node isn't an Object node or doesn't contain the "error" key
El cheque isMember()
también afirmará para Object
nodos no, así que asegúrese de comprobar isObject()
antes de comprobar si isMember()
UserRoot0
no se garantiza que sea un Object
.
Hay una nueva configuración, ['failIfExtra'] (http://open-source-parsers.github.io/jsoncpp-docs/doxygen/class_json_1_1_char_reader_builder.html#ac69b7911ad64c171c51ebaf2ea26d958), que detectará este error común. También es parte de 'strictMode()'. – cdunn2001