Operator []
jest ważny tylko dla obiektów JsonValue
, które są typu Object
lub zerowego. Wszystkie inne (Int
, Bool
, Array
itd.) Będą twierdzić.
Jeśli obiekt UserRoot0
jest Array
lub jakiś inny rodzaj nie- Object
, masz jeszcze trochę do zrobienia (jak iteracji do podrzędnych węzłów), aby znaleźć swój węzeł docelowy, który może lub nie może zawierać błąd. Wydrukuj UserRoot0.toStyledString()
, aby zobaczyć, jak wygląda twój JSON, i upewnij się, że wygląda jak Obiekt JSON (zobacz json.org, aby uzyskać ładny przegląd tego, co to jest).
Komentarz do "ToDo" u góry pliku źródłowego json_value.cpp (gdzie zdefiniowano JSON_ASSERT
) sugeruje, że programiści mogą planować bardziej niezawodną obsługę błędów zamiast tych twierdzeń w przyszłych wersjach, ale w międzyczasie można sprawdzić samemu, jak to:
if(UserRoot0.isObject() && UserRoot0.isMember("error"))
// Process error node
else
// This node isn't an Object node or doesn't contain the "error" key
kontrola isMember()
będą również dochodzić do nie- Object
węzłów, więc należy sprawdzić isObject()
przed sprawdzeniem isMember()
jeśli UserRoot0
nie jest gwarantowana być Object
.
Istnieje nowe ustawienie, ['failIfExtra'] (http://open-source-parsers.github.io/jsoncpp-docs/doxygen/class_json_1_1_char_reader_builder.html#ac69b7911ad64c171c51ebaf2ea26d958), które wykryje ten typowy błąd. Jest także częścią 'strictMode()'. – cdunn2001