如何使用GSON将List转换为JSON对象?

47

我有一个List需要使用GSON转换为JSON对象。我的JSON对象中有JSON数组。

public class DataResponse {

    private List<ClientResponse> apps;

    // getters and setters

    public static class ClientResponse {
        private double mean;
        private double deviation;
        private int code;
        private String pack;
        private int version;

        // getters and setters
    }
}

以下是我需要将我的List转换为JSON对象的代码,其中包含JSON数组 -

public void marshal(Object response) {

    List<DataResponse.ClientResponse> clientResponse = ((DataResponse) response).getClientResponse();

    // now how do I convert clientResponse list to JSON Object which has JSON Array in it using GSON?

    // String jsonObject = ??
}

目前,我的列表中只有两个项目 - 因此我需要我的JSON对象如下 -

{  
   "apps":[  
      {  
         "mean":1.2,
         "deviation":1.3
         "code":100,
         "pack":"hello",
         "version":1
      },
      {  
         "mean":1.5,
         "deviation":1.1
         "code":200,
         "pack":"world",
         "version":2
      }
   ]
}

最佳方法是什么?


1
你展示的JSON不是一个JSON数组,而是一个JSON对象。 - Sotirios Delimanolis
1
抱歉,是 JSON 对象。让我重新表达问题。 - AKIWEB
5个回答

91

这是来自Google Gson 文档中的一个示例,说明如何将列表实际转换为JSON字符串:

Type listType = new TypeToken<List<String>>() {}.getType();
 List<String> target = new LinkedList<String>();
 target.add("blah");

 Gson gson = new Gson();
 String json = gson.toJson(target, listType);
 List<String> target2 = gson.fromJson(json, listType);

你需要在toJson方法中设置列表的类型,并将列表对象传递给它,以将其转换为JSON字符串或反之亦然。

你需要在toJson方法中设置列表的类型,并将列表对象传递给它,以将其转换为JSON字符串或反之亦然。


这是不必要的,也无法生成他们要求的JSON。 - Sotirios Delimanolis
1
这不会为 JSON 创建任何键名。如何创建 OP 期望的键名呢? - Sazzad Hissain Khan

47
如果您的marshal方法中的response是一个DataResponse对象,那么这就是您应该序列化的对象。
Gson gson = new Gson();
gson.toJson(response);

那将为您提供您正在寻找的JSON输出。


15

假设您也希望以JSON格式获取数据

{
  "apps": [
    {
      "mean": 1.2,
      "deviation": 1.3,
      "code": 100,
      "pack": "hello",
      "version": 1
    },
    {
      "mean": 1.5,
      "deviation": 1.1,
      "code": 200,
      "pack": "world",
      "version": 2
    }
  ]
}

不是

{"apps":[{"mean":1.2,"deviation":1.3,"code":100,"pack":"hello","version":1},{"mean":1.5,"deviation":1.1,"code":200,"pack":"world","version":2}]}
你可以使用“美化打印”。要这样做,请使用

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(dataResponse);

0

确保首先将您的集合转换为数组:

Gson().toJson(objectsList.toTypedArray(), Array<CustomObject>::class.java)

-4
我们还可以使用另一种解决方法,首先创建一个 myObject 数组,然后将它们转换成列表。
final Optional<List<MyObject>> sortInput = Optional.ofNullable(jsonArgument)
                .map(jsonArgument -> GSON.toJson(jsonArgument, ArrayList.class))
                .map(gson -> GSON.fromJson(gson, MyObject[].class))
                .map(myObjectArray -> Arrays.asList(myObjectArray));

好处:

  • 我们这里没有使用反射。 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接