如何使用 GSON 将列表转换为 JSON 对象?
How to convert List to a JSON Object using GSON?
我有一个列表,我需要使用 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
}
}
下面是我的代码,我需要在其中将列表转换为 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
}
]
}
最好的方法是什么?
如果 marshal
方法中的 response
是 DataResponse
,那么这就是您应该序列化的内容。
Gson gson = new Gson();
gson.toJson(response);
这将为您提供所需的 JSON 输出。
google gson documentation 中有一个关于如何将列表实际转换为 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 字符串,反之亦然。
假设您还想获得格式为
的 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);
我们还可以使用另一种解决方法,首先创建一个 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));
好处:
- 我们这里没有使用反射。 :)
确保将您的集合转换为数组:
Gson().toJson(objectsList.toTypedArray(), Array<CustomObject>::class.java)
我有一个列表,我需要使用 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
}
}
下面是我的代码,我需要在其中将列表转换为 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
}
]
}
最好的方法是什么?
如果 marshal
方法中的 response
是 DataResponse
,那么这就是您应该序列化的内容。
Gson gson = new Gson();
gson.toJson(response);
这将为您提供所需的 JSON 输出。
google gson documentation 中有一个关于如何将列表实际转换为 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 字符串,反之亦然。
假设您还想获得格式为
的 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);
我们还可以使用另一种解决方法,首先创建一个 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));
好处:
- 我们这里没有使用反射。 :)
确保将您的集合转换为数组:
Gson().toJson(objectsList.toTypedArray(), Array<CustomObject>::class.java)