2011-12-22 83 views
2

我想創建類似json字符串。 。使用在JSON字符串中意外轉義

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

org.json。*包。 。

或使用其他包..

我的代碼::

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()); 

} 

程序的輸出:

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

什麼是你的問題? – reporter

+0

'data'的值實際上被包含在一個字符串中,並且最裏面的雙引號被轉義了。 – JBert

+1

@JayPatel:你確定你想要{「data」:**「** {**」** name「:」jay **「**} **」**}而不是{「data」:{ 「名」: 「周杰倫」}}?這些報價位於一個奇怪的位置...... – JBert

回答

3

你的問題是,你的名字做了toString() = jay內部對象,它將一個對象變成一個字符串。在第二行中,您基本上會說data=<string from above>,以便Json庫必須通過使用\轉義字符串來編碼字符串中的"

於是,你會是這樣的:

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

String result = outer.toString(); 
1

你不應該建立你的JSON字符串兩個部分,這將導致第二JSONStringer逃脫你的數據。

只需使用生成器生成嵌套對象:

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()); 
} 

這給了我:

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