2011-12-22 8 views
2

jsonのような文字列を作成したいと思います。 。JSON Stringでの意図しないエスケープ

{"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

そして、あなたの質問は何です:

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

これは私与えますか? – reporter

+0

'data'の値は実際には文字列で囲まれ、一番内側の二重引用符はエスケープされています。 – JBert

+1

@JayPatel:「データ」:**「**」**「**」** ** ** ** ** ** ** ** **名前**: "name": "jay"}}?それらの引用符は奇妙な場所にあります... – JBert

答えて

3

あなたの問題は、あなたが名前にtoString()を行うということです= jay内部オブジェクト。オブジェクトから文字列に変換されます。 2行目では、基本的にdata=<string from above>と言っています。そのため、Jsonライブラリはでエスケープして文字列に"をエンコードする必要があります。

だから、あなたは、おそらくこのように行くだろう:

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

String result = outer.toString(); 
1

次の2つの部分にあなたのJSON文字列を構築するべきではない、これはあなたのデータをエスケープするために、第2 JSONStringerの原因となります。

単純にネストされたオブジェクトを構築するビルダーを使用します。

JSON STRING {"data":{"name":"jay"}} 
関連する問題