2011-12-22 1 views
2

Je veux créer une chaîne JSON comme. .Échappement involontaire dans la chaîne JSON

{"data":"{"name":"jay"}"} 

utilisant org.json. * Paquets. .

ou en utilisant un autre colis ..

mon code est ::

try {  
String strJSONStringer = new JSONStringer().object().key("name").value("jay").endObject().toString(); 

String record = new JSONStringer().object().key("data") .value(strJSONStringer).endObject().toString(); 

System.out.println("JSON STRING " + record); 

} catch (JSONException e) { 
     e.printStackTrace(); 

System.out.println("### ERROR ### :: " + e.getMessage()); 

} 

La sortie du programme:

JSON STRING {"data":"{\"name\":\"jay\"}"} 
+0

Et quelle est votre question? – reporter

+0

La valeur de 'data' est en fait incluse dans une chaîne, et les doubles quotes les plus internes ont été échappées. – JBert

+1

@JayPatel: êtes-vous sûr de vouloir {"data": ** "** {**" ** name ":" jay ** "**} **" **} et non {"data": { "nom": "jay"}}? Ces citations sont dans un endroit étrange ... – JBert

Répondre

3

Votre problème est que vous faites un toString() sur le nom = jay objet interne, qui transforme ceci d'un objet en chaîne. Dans la deuxième ligne, vous dites en gros data=<string from above> de sorte que la bibliothèque JSON doit encoder le " dans la chaîne en l'échappant avec \.

Alors vous irez probablement comme ceci:

JSONObject inner = new JSONObject().put("name","jay"); 
JSONObject outer = new JSONObject().put("data",inner); 

String result = outer.toString(); 
1

Vous ne devriez pas construire votre chaîne JSON en deux parties, ce qui provoque la deuxième JSONStringer pour échapper à vos données.

Utilisez simplement le constructeur pour construire des objets imbriqués:

try { 
    String record = new JSONStringer() 
      .object() 
      .key("data") 
       .object() 
       .key("name").value("jay") 
       .endObject() 
      .endObject().toString(); 

    System.out.println("JSON STRING " + record); 

} catch (JSONException e) { 
    e.printStackTrace(); 
    System.out.println("### ERROR ### :: " + e.getMessage()); 
} 

Cela me donne:

JSON STRING {"data":{"name":"jay"}} 
Questions connexes