从 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;
        }
    }
}