0

所以我遇到了本教程,用于将 POJO 序列化为 json,然后将 json 文件反序列化回 POJO。http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

他使用了这些对我有用的有用方法,但仅适用于文件中的单个 POJO:

//1. Convert Java object to JSON format
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("c:\\user.json"), user);

//2. Convert JSON to Java object
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(new File("c:\\user.json"), User.class);

如何反序列化 POJO 列表?我的序列化文件如下所示:

[ {
  "name" : {
    "first" : "Wonder",
    "last" : "Woman"
  },
  "ssn" : "123-456-7890",
  "gender" : "FEMALE",
  "verified" : false
}, {
  "name" : {
    "first" : "Bat",
    "last" : "Man"
  },
  "ssn" : "321-456-0987",
  "gender" : "FEMALE",
  "verified" : true
}, {
  "name" : {
    "first" : "Super",
    "last" : "Man"
  },
  "ssn" : "321-654-1111",
  "gender" : "FEMALE",
  "verified" : true
} ]
4

3 回答 3

3
  1. 一种选择(可能是最简单的)是定义一个包含Users 列表的类:

    public class Users
    {
      public User[] users;
    }
    

    然后表演

    ObjectMapper mapper = new ObjectMapper();
    Users users = mapper.readValue(new File("c:\\user.json"), Users.class);
    
  2. 另一种选择是遍历 json 数组,并捕获用户数组的每个元素,然后使用ObjectMapper.readValue(String content, Class<T> valueType),如下所示:

    ObjectMapper mapper = new ObjectMapper();
    InputStream stream = new FileInputStream("c:\\user.json");
    User user;
    
    JsonNode json = mapper.readTree(stream);
    
    //NOTE: calling json.isArray() should return true.
    for (JsonNode userJson : json)
    {
      user = mapper.readValue(userJson, User.class);
      // use the constructed user...
    }
    

    注意:我没有测试过以上,所以让我知道它是否有效。

于 2013-08-26T20:14:24.537 回答
1

嗯?你有没有尝试过:

User[] users = mapper.readValue(new File("c:\\user.json"), User[].class);
于 2013-08-27T19:10:22.757 回答
0

在您的顶级课程中,您有很多人。像这样的东西

    class People {
    public List<Person> persons;
}
于 2013-08-26T20:08:26.567 回答