从 JSON 数组字符串创建 POJO 对象
Creating POJO objects from JSON array String
我有一个 JSON 数组字符串,如下所示。
"[
{
"id" : "123",
"name":"John Doe",
"Address":"53/A"
},
{
"id" : "1234",
"name":"John Doe1",
"Address":"53/AB"
}
]"
我有一个 POJO class 与内部 JSON 对象映射,如下所示。
class User {
String id;
String name;
String Address;
//Getters & Setters
}
我想从上面的字符串创建 POJO 对象并创建一个用户 ArrayList。我怎样才能做到这一点? (使用像 Gson 这样的库就可以了)。谢谢。
既然你提到了 Gson,它提供了一种方法 (link),这正是你正在寻找的方法。
Gson.fromJson(java.lang.String json, java.lang.Class<T> classOfT)
如果您想反序列化泛型类型(例如列表),文档建议您使用此方法:
Gson.fromJson(java.lang.String json, java.lang.reflect.Type typeOfT)
还有一个教程 (link) 可以处理一些接近您想要执行的操作的用例。
你可以使用杰克逊。您可以在此处找到简单示例:https://www.baeldung.com/jackson-collection-array#to-array
示例:
ObjectMapper mapper = new ObjectMapper();
String jsonArray = "[{\"stringValue\":\"a\",\"intValue\":1,\"booleanValue\":true}, {\"stringValue\":\"bc\",\"intValue\":3,\"booleanValue\":false}]";
MyDto[] asArray = mapper.readValue(jsonArray, MyDto[].class);
ArrayList<LinkedTreeMap> list = gson.fromJson(json, ArrayList.class);
List<User> users= list.stream()
.map(s -> gson.fromJson(gson.toJson(s), User.class))
.collect(Collectors.toList());
您可以使用 Jackson ObjectMapper
,它非常简单。下面是示例代码。
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.List;
public class JsanParserExample {
public static void main(String[] args) throws IOException {
String json = "[\n" +
" {\n" +
" \"id\" : \"123\",\n" +
" \"name\":\"John Doe\",\n" +
" \"address\":\"53/A\"\n" +
" \n" +
" },\n" +
" {\n" +
" \"id\" : \"1234\",\n" +
" \"name\":\"John Doe1\",\n" +
" \"address\":\"53/AB\"\n" +
" \n" +
" }\n" +
" \n" +
"]";
ObjectMapper objectMapper = new ObjectMapper();
List<User> userList = objectMapper.readValue(json,new TypeReference<List<User>>() {});
userList.forEach(user -> System.out.println(user.getId()));
}
private static class User {
private String id;
private String name;
private String address;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
}
我有一个 JSON 数组字符串,如下所示。
"[
{
"id" : "123",
"name":"John Doe",
"Address":"53/A"
},
{
"id" : "1234",
"name":"John Doe1",
"Address":"53/AB"
}
]"
我有一个 POJO class 与内部 JSON 对象映射,如下所示。
class User {
String id;
String name;
String Address;
//Getters & Setters
}
我想从上面的字符串创建 POJO 对象并创建一个用户 ArrayList。我怎样才能做到这一点? (使用像 Gson 这样的库就可以了)。谢谢。
既然你提到了 Gson,它提供了一种方法 (link),这正是你正在寻找的方法。
Gson.fromJson(java.lang.String json, java.lang.Class<T> classOfT)
如果您想反序列化泛型类型(例如列表),文档建议您使用此方法:
Gson.fromJson(java.lang.String json, java.lang.reflect.Type typeOfT)
还有一个教程 (link) 可以处理一些接近您想要执行的操作的用例。
你可以使用杰克逊。您可以在此处找到简单示例:https://www.baeldung.com/jackson-collection-array#to-array
示例:
ObjectMapper mapper = new ObjectMapper();
String jsonArray = "[{\"stringValue\":\"a\",\"intValue\":1,\"booleanValue\":true}, {\"stringValue\":\"bc\",\"intValue\":3,\"booleanValue\":false}]";
MyDto[] asArray = mapper.readValue(jsonArray, MyDto[].class);
ArrayList<LinkedTreeMap> list = gson.fromJson(json, ArrayList.class);
List<User> users= list.stream()
.map(s -> gson.fromJson(gson.toJson(s), User.class))
.collect(Collectors.toList());
您可以使用 Jackson ObjectMapper
,它非常简单。下面是示例代码。
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.List;
public class JsanParserExample {
public static void main(String[] args) throws IOException {
String json = "[\n" +
" {\n" +
" \"id\" : \"123\",\n" +
" \"name\":\"John Doe\",\n" +
" \"address\":\"53/A\"\n" +
" \n" +
" },\n" +
" {\n" +
" \"id\" : \"1234\",\n" +
" \"name\":\"John Doe1\",\n" +
" \"address\":\"53/AB\"\n" +
" \n" +
" }\n" +
" \n" +
"]";
ObjectMapper objectMapper = new ObjectMapper();
List<User> userList = objectMapper.readValue(json,new TypeReference<List<User>>() {});
userList.forEach(user -> System.out.println(user.getId()));
}
private static class User {
private String id;
private String name;
private String address;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
}