当前位置:  开发笔记 > 编程语言 > 正文

如何要求gson避免在json响应中转义json?

如何解决《如何要求gson避免在json响应中转义json?》经验,为你挑选了1个好方法。

我有一个这样的响应对象:

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

如您所见,我在json "response"字段中的字符串被转义了。有什么办法可以让gson不要这样做,而是返回一个完整的响应,如下所示:

{
  "response": {"hello":0,"world":"0"},
  "error": "OK",
  "status": "SUCCESS"
}

而且-如果我按上述方式进行操作,是否有任何问题?

注意:我的"response"字符串将始终为JSON字符串或为null,因此我的"response"字符串中只有这两个值。在"response"field中,我可以有任何json字符串,因为此库正在调用rest服务,该服务可以返回任何json字符串,因此我将其存储在string "response"字段中。



1> nickb..:

如果您的response字段可以是任意JSON,则您需要:

    将其定义为任意JSON字段(通过将其定义为JSON层次结构的根来利用GSON内置的JSON类型系统JsonElement

    public class TestResponse {
        private final JsonElement response;
    }
    

    String字段转换为适当的JSON对象表示形式。为此,您可以使用GSON的JsonParser类:

    final JsonParser parser = new JsonParser();
    
    String responseJson = "{\"hello\":0,\"world\":\"0\"}";
    JsonElement json = parser.parse(responseJson); // Omits error checking, what if responseJson is invalid JSON?
    System.out.println(gson.toJson(new TestResponse(json)));
    

这应该打印:

{
  "response": {
    "hello": 0,
    "world": "0"
  }
}

它也应该适用于任何有效的JSON:

String responseJson = "{\"arbitrary\":\"fields\",\"can-be\":{\"in\":[\"here\",\"!\"]}}";
JsonElement json = parser.parse(responseJson);
System.out.println(gson.toJson(new TestResponse(json)));

输出:

{
  "response": {
    "arbitrary": "fields",
    "can-be": {
      "in": [
        "here",
        "!"
      ]
    }
  }
}

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有