Pergunta

Im usando jsoncpp , seu grande, mas quando eu preciso verificar se a estrutura json contém tag quando eu faço com ele :

UserRoot0["error"].isNull()

seu lança-me afirmar, a partir de json_value.cpp linha de 1025

JSON_ASSERT( type_ == nullValue  ||  type_ == objectValue );

quero verificar se a resposta estou recebendo é a partir deste tipo:

{
    "error" : {
        "message" : "Error validating application.",
        "type" : "OAuthException",
        "code" : 190
    }
}
Foi útil?

Solução

O [] o operador só é válida para JsonValue objetos que são do tipo Object ou nulo.Todos os outros (Int, Bool, Array, etc.) vai valer.

Se o seu UserRoot0 o objeto é uma Array ou algum outro nãoObject tipo, você tem mais algum trabalho para fazer (como iterar em sub-nós) para localizar o nó de destino, que pode conter ou não o erro.Imprimir UserRoot0.toStyledString() para ver o que o JSON parece, e certifique-se de que ele se parece com um Objeto JSON (ver json.org para uma boa visão geral do que é).

Um comentário "ToDo" no topo da json_value.cpp arquivo de origem (onde JSON_ASSERT é definido) implica que os desenvolvedores podem estar planejando mais robusta de tratamento de erro em vez de estas declarações em versões futuras, mas, entretanto, pode verificar-se, como este:

if(UserRoot0.isObject() && UserRoot0.isMember("error"))
    // Process error node
else
    // This node isn't an Object node or doesn't contain the "error" key

O isMember() verifique também vai valer para os não-Object nós, portanto, certifique-se de verificar isObject() antes de verificar isMember() se UserRoot0 não é garantido para ser um Object.

Outras dicas

Eu tropecei neste também.Como Ennael diz que você precisa se certificar de que você está lidando com um tipo de objeto.FWIW meu problema foi causado por utilizar o JSON como:

    "error" : {
        "code" : 190
    }

...em vez do que eu pretendia:

{
    "error" : {
        "code" : 190
    }
}

Excluindo o exterior conjunto de parêntesis fará com que o tipo de valor para se tornar seqüência de caracteres em vez de objeto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top