Java JSON字符串中的意外转义

Java JSON字符串中的意外转义,java,json,Java,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") .val

我想创建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\"}"}

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

所以你可能会这样说:

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

String result = outer.toString();

您不应该分两部分构建JSON字符串,这会导致第二个JSONString转义您的数据

只需使用生成器构建嵌套对象:

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

data
的值实际上包含在一个字符串中,最里面的双引号被转义。@JayPatel:您确定要{“data”:“{“name”:“jay”}而不是{“data”:{“name”:“jay”}?这些引号位于一个奇怪的位置。。。