在JSON字符串中无意中转义

时间:2011-12-22 09:25:17

标签: java json

我想创建json字符串。 。

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

使用 org.json。* packages

或使用其他包..

我的代码是::

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\"}"}

2 个答案:

答案 0 :(得分:3)

您的问题是您在name = jay内部对象上执行了toString(),这会将此对象转换为字符串。在第二行中,您基本上会说data=<string from above>,以便Json库必须通过使用"转义它来对字符串中的\进行编码。

所以你可能会这样:

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

String result = outer.toString();

答案 1 :(得分: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"}}