我有一个这样的响应对象:
public class TestResponse {
private final String response;
private final ErrorCodeEnum error;
private final StatusCodeEnum status;
// .. constructors and getters here
}
我使用Gson库序列化上面的类,如下所示:
Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create();
System.out.println(gson.toJson(testResponseOutput));
我得到的回复如下所示:
{
"response": "{\"hello\":0,\"world\":\"0\"}",
"error": "OK",
"status": "SUCCESS"
}
正如你所看到的,我在"response"
字段中的json字符串被转义了。有没有什么方法可以让gson不要这样做,而是返回一个完整的响应,像这样:
{
"response": {"hello":0,"world":"0"},
"error": "OK",
"status": "SUCCESS"
}
还有-如果我按上面的方式做有什么问题吗?
**注意:**我的"response"
字符串将始终是JSON字符串,或者它将为null,因此只有这两个值将存在于我的"response"
字符串中。在"response"
字段中,我可以有任何json字符串,因为这个库调用了一个可以返回任何json字符串的rest服务,所以我将其存储在字符串"response"
字段中。
6条答案
按热度按时间s5a0g9ez1#
如果你的
response
字段可以是任意的JSON,那么你需要:1.将其定义为任意JSON字段(通过将其定义为JSON层次结构的根,利用已经内置到GSON中的JSON类型系统-
JsonElement
)1.将
String
字段转换为适当的JSON对象表示形式。为此,您可以使用GSON的JsonParser
类:这应该打印:
它也应该适用于任何有效的JSON:
输出:
9rbhqvlz2#
我知道这是旧的,但只是添加一个潜在的答案,以防万一是需要的。
听起来你只想返回响应而不想逃避。转义是一件好事,它将有助于防止安全问题,并防止您的JS应用程序因错误而崩溃。
但是,如果您仍然想忽略转义,请尝试:
Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().serializeNulls().create();
carvr3hs3#
添加简单的TypeAdapter并使用
jsonValue(value)
gson 2.8.0版本1:
...
vesrion 2
brvekthn4#
您应该有一个嵌套对象。
c9x0cxw05#
下面的代码是避免转义字符。使用getAsString方法。
a8jjtwal6#
除了String,根据您的需要,您可以使用Map(或类似的)或嵌套的Object。这样表示应该没有问题,但在您的示例中,如果它是一个String,如果您没有转义字符(如双引号),则会出现问题。