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. 1 つのオプション (おそらく最も簡単) は、 のリストを含むクラスを定義することですUser

    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 に答える