2016-01-28 1 views
0

J'essaye d'analyser ci-dessous json. Cela doit me jeter l'erreur disant format json incorrect. Mais le parseur n'analyse le json que jusqu'à "value: 15" et ne jette aucune exception. Comment puis-je atteindre cet objectif?Comment trouver l'exception JsonParse dans json

String json = { and : [{key: domain, value: cricket}, {key : STAT_CDE,value : 15}]}, { and : [{key: domain, value: football}, {key : STAT_CDE,value : 10}]} 

Exemple de code J'utilise:

import org.codehaus.jackson.map.ObjectMapper; 

ObjectMapper mapper = new ObjectMapper(); 
mapper.readTree(json); //this line is not throwing me any exception 

Voici l'extrait de code:

import org.codehaus.jackson.map.ObjectMapper; 

public class JsonTestParse { 
    public static void main(String[] args) { 
     String json = "{ \"and\" : [{\"key\": \"domain\", \"op\": \"=\", \"value\": \"cricket\"}, {\"key\" : \"STAT_CDE\",\"op\" : \"=\",\"value\" : \"13\"}]},"+ 
       "{ \"and\" : [{\"key\": \"domain\", \"op\": \"=\", \"value\": \"Football\"}, {\"key\" : \"STAT_CDE\",\"op\" : \"=\",\"value\" : \"10\"}]}"; 

     System.out.println("json: " + json); 

     ObjectMapper mapper = new ObjectMapper(); 
     try { 
      mapper.readTree(json); 
     } catch (Exception e) { 
      System.out.println("object mapper exp"); 

     } 
     System.out.println("mapper complete"); 

    } 

} 

Et la sortie: ligne

1: JSON: { "et" : [{"key": "domain", "op": "=", "value": "cricket"}, {"clé": "STAT_CDE", "op": "=", "valeur": " 13 "}]}, {" et ": [{" clé ":" domaine "," op ":" = "," valeur ":" Football "}, {" clé ":" STAT_CDE "," op ":" = "," valeur ":" 10 "}]} ligne 2: mapper complète

+0

Ce n'est pas JSON, JSON est une chaîne, et vous devez double propriété de devis noms –

+0

okay.Voici la chaîne java json que j'utilise: {\ "et \": [{\ "key \": \ "domaine \", \ "op \": \ "= \", \ "valeur \": \ "cricket \"}, {\ "clé \": \ "STAT_CDE \", \ "op \": \ "= \", \ "valeur \": \ "15 \"}]}, {\ "et \ ": [{\" clé \ ": \" domaine \ ", \" op \ ": \" = \ ", \" valeur \ ": \" football \ "}, {\" clé \ ": \ "STAT_CDE \", \ "op \": \ "= \", \ "valeur \": \ "10 \"}]} –

Répondre

1

problème est qu'il n'y a pas de problème avec ce format json! Syntaxiquement, vous affectez une liste délimitée par des virgules à json, ce qui est un code parfaitement valide - il va définir json au premier élément de la liste et ne rien faire avec le reste des valeurs.

Après votre code exécute, json ressemble à ceci:

String json = { and : [{key: domain, value: cricket}, {key : STAT_CDE,value : 15}]} 

Et cette valeur a été ignorée entièrement:

{ and : [{key: domain, value: football}, {key : STAT_CDE,value : 10}]} 

Comme vous pouvez le voir, json est structuré parfaitement. En outre, il semble que vous attendiez un objet String, mais que vous fournissiez une carte à la place.

les opérations suivantes:

String json = "{ and : [{key: domain, value: cricket}, {key : STAT_CDE,value : 15}]}, { and : [{key: domain, value: football}, {key : STAT_CDE,value : 10}]}" 

Et puis analyser json. Cela échouera très certainement car les clés ne sont pas entourées de guillemets (le caractère "), qui est une exigence du format json.

EDIT

Pour tenir à jour la question:

Voici une vue formatée du JSON, vous dites que vous travaillez avec:

{ 
    "and" : [ 
     {"key": "domain", "op": "=", "value": "cricket"}, 
     {"key" : "STAT_CDE","op" : "=","value" : "15"} 
    ] 
}, 
{ 
    "and" : [ 
     {"key": "domain", "op": "=", "value": "football"}, 
     {"key" : "STAT_CDE","op" : "=","value" : "10"} 
    ] 
} 

Le problème est que cette n'est pas un objet json - ce sont deux objets json séparés, dont chacun est bien formé. Je devine que ObjectMapper analyse une structure json complète, et ignore les données de fin sans lancer une erreur.

Si vous souhaitez capturer toute la structure en JSON, vous aurez besoin de les enfermer ensemble, probablement en utilisant un tableau:

[ 
    { 
     "and" : [ 
      {"key": "domain", "op": "=", "value": "cricket"}, 
      {"key" : "STAT_CDE","op" : "=","value" : "15"} 
     ] 
    }, 
    { 
     "and" : [ 
      {"key": "domain", "op": "=", "value": "football"}, 
      {"key" : "STAT_CDE","op" : "=","value" : "10"} 
     ] 
    } 
] 
+0

Désolé de partager la chaîne modifiée. Voici la chaîne entière que je fournis à la chaîne. ObjectMapper ne lance toujours pas l'exception. J'ai validé cela en ligne et je vois une erreur. La chaîne est "{\" et \ ": [{\" key \ ": \" domaine \ ", \" op \ ": \" = \ ", \" valeur \ ": \" cricket \ "}, {\ "clé \": \ "STAT_CDE \", \ "op \": \ "= \", \ "valeur \": \ "15 \"}]}, {\ "et \": [{\ "key \": \ "domaine \", \ "op \": \ "= \", \ "valeur \": \ "football \"}, {\ "clé \": \ "STAT_CDE \", \ "op \": \ "= \", \ "valeur \": \ "10 \"}]}} " –