使用gson反序列化多个类型

时间:2012-07-19 20:45:32

标签: gson

我从http网络服务

收到以下JSON响应
{"status":100,"data":[{"name":"kitchen chair","price":25.99,"description":null}]}

现在我希望能够反序列化这个。我偶然发现了谷歌的Gson,它最初适用于一些小型测试用例,但我在上述字符串反序列化方面遇到了一些麻烦。

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

我正在阅读Gson User Guide,理想情况下,我希望有一个Response对象,它有两个属性:statusdata,但是data字段必须是ListMap个对象,这可能会让Gson难以理解。

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

我最好如何对此进行反序列化?

1 个答案:

答案 0 :(得分:2)

目前尚不清楚究竟已经尝试过什么似乎对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}]}