2011-12-22 5 views
2

json string like를 만들고 싶습니다. .의도하지 않은 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

그리고 당신의 질문은 무엇인가 :

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 내부 객체. 객체에서 문자열로 바뀝니다. 두 번째 줄에서는 기본적으로 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됩니다.

간단하게 중첩 된 객체를 구축하기 위해 빌더를 사용

JSON STRING {"data":{"name":"jay"}} 
관련 문제