L'operatore []
è valido solo per gli oggetti JsonValue
di tipo Object
o null. Tutti gli altri (Int
, Bool
, Array
, ecc.) Affermeranno.
Se l'oggetto è un UserRoot0
Array
o qualche altro tipo non Object
, avete un po 'di lavoro da fare (come l'iterazione in sotto-nodi) per trovare il tuo nodo di destinazione che possono o non possono contenere l'errore. Stampa UserRoot0.toStyledString()
per vedere come è il tuo JSON e assicurati che assomigli ad un oggetto JSON (vedi json.org per una buona panoramica di cosa sia).
Un commento "ToDo" nella parte superiore del file di origine json_value.cpp (dove è definito JSON_ASSERT
) implica che gli sviluppatori potrebbero pianificare una gestione degli errori più affidabile invece di queste asserzioni nelle versioni future, ma nel frattempo, si può controllare voi stessi, in questo modo:
if(UserRoot0.isObject() && UserRoot0.isMember("error"))
// Process error node
else
// This node isn't an Object node or doesn't contain the "error" key
Il controllo isMember()
anche affermare per i non Object
nodi, in modo da essere sicuri di controllare isObject()
prima di verificare se isMember()
UserRoot0
non è garantito per essere un Object
.
C'è una nuova impostazione, ['failIfExtra'] (http://open-source-parsers.github.io/jsoncpp-docs/doxygen/class_json_1_1_char_reader_builder.html#ac69b7911ad64c171c51ebaf2ea26d958), che catturerà questo errore comune. Fa anche parte di 'strictMode()'. – cdunn2001