【问题标题】:deserializing multiple types with gson使用 gson 反序列化多种类型
【发布时间】:2012-07-19 20:45:32
【问题描述】:

我从我的 http 网络服务收到以下 JSON 响应

{"status":100,"data":[{"name":"kitchen chair","price":25.99,"description":null}]}

现在我希望能够反序列化它。我偶然发现了来自 Google 的 Gson,它起初在一些小型测试用例中运行良好,但在反序列化上述字符串时遇到了一些麻烦。

我知道data 字段中只有一项,但它可以包含多个,这就是为什么所有响应都将data 字段作为一个数组。

我正在阅读Gson User Guide,理想情况下我希望拥有一个具有两个属性的Response 对象:statusdata,但data 字段必须是List Map 可能让 Gson 很难受的对象。

然后我查看了this,这是一个更接近我的问题的示例,但我仍然无法弄清楚。在示例中,整个响应是一个数组,而我的 JSON 字符串有一个字符串元素,然后是一个数组。

我最好如何反序列化?

【问题讨论】:

    标签: gson


    【解决方案1】:

    目前尚不清楚已经尝试过哪些似乎“对 Gson 来说很难”。

    Gson 的最新版本简单地处理了这个问题。下面是一个例子。

    input.json

    {
        "status":100,
        "data":
        [
            {
                "name":"kitchen chair",
                "price":25.99,
                "description":null
            }
        ]
    }
    

    Response.java

    import java.util.List;
    import java.util.Map;
    
    class Response
    {
      int status;
      List<Map> data;
    }
    

    GsonFoo.java

    import java.io.FileReader;
    
    import com.google.gson.Gson;
    
    public class GsonFoo
    {
      public static void main(String[] args) throws Exception
      {
        Response response = new Gson().fromJson(new FileReader("input.json"), Response.class);
        System.out.println(new Gson().toJson(response));
      }
    }
    

    输出:

    {"status":100,"data":[{"name":"kitchen chair","price":25.99}]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多