JSONCPP Cómo comprobar si la etiqueta es NULL .isnull () lanzan afirmación
-
10-12-2019 - |
Pregunta
estoy usando JSONCPP, es genial, pero cuando necesito verificar si JSON STRENSTRY contiene etiqueta Cuando lo hago con:
UserRoot0["error"].isNull()
que me echa afirmar desde json_value.cpp line 1025
JSON_ASSERT( type_ == nullValue || type_ == objectValue );
Quiero verificar si la respuesta estoy obteniendo es de este tipo:
{
"error" : {
"message" : "Error validating application.",
"type" : "OAuthException",
"code" : 190
}
}
Solución
The []
operator is only valid for JsonValue
objects that are of type Object
or null. All others (Int
, Bool
, Array
, etc.) will assert.
If your UserRoot0
object is an Array
or some other non-Object
type, you have some more work to do (like iterating into sub-nodes) to find your target node that may or may not contain the error. Print UserRoot0.toStyledString()
to see what your JSON looks like, and make sure it looks like a JSON Object (see json.org for a nice overview of what that is).
A "ToDo" comment at the top of the json_value.cpp source file (where JSON_ASSERT
is defined) implies that the developers may be planning more robust error handling instead of these asserts in future versions, but in the meantime, you can check yourself, like this:
if(UserRoot0.isObject() && UserRoot0.isMember("error"))
// Process error node
else
// This node isn't an Object node or doesn't contain the "error" key
The isMember()
check will also assert for non-Object
nodes, so be sure to check isObject()
before checking isMember()
if UserRoot0
isn't guaranteed to be an Object
.
Otros consejos
I stumbled on this too. As Ennael says you need to make sure you are dealing with an object type. FWIW my problem was caused by using JSON like this:
"error" : {
"code" : 190
}
... instead of what I intended:
{
"error" : {
"code" : 190
}
}
Excluding the outer set of parenthesis will cause the value type to become string instead of object.