2013-05-11 19 views
6

これはおそらく重複した質問です。linkを参照してください。
私は1つのjsonオブジェクトをPOJOにマップすることができます。しかし、どのようにjsonオブジェクトの配列を同じjacksonフレームワークを使用してpojoに変換できますか?jacksonオブジェクトマッパーを使用してJSON配列をPOJOに変換する

private void jsonToPojo(){ 
    ObjectMapper mapper=new ObjectMapper(); 

    try { 
     User1 user1=mapper.readValue(readFromFile(), User1.class); 
     User1[] user2=mapper.readValue(readFromFile(), User1[].class); 
     System.out.println(user1); 
     Toast.makeText(getApplicationContext(), "inside try", 0).show(); 
    } catch (JsonParseException e) { 
     // TODO Auto-generated catch block 
     Log.i("Exception", "jsonparseexception"); 
     e.printStackTrace(); 
    } catch (JsonMappingException e) { 
     // TODO Auto-generated catch block 
     Log.i("Exception", "jsonmapping exception"); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     Log.i("Exception", "ioexception"); 
     e.printStackTrace(); 
    } 
} 

これはクラスユーザーオブジェクトです。

public class User { 
private int age = 23; 
private String name = "amal"; 
private List<String> messages = new ArrayList<String>() { 
    { 
     add("hi"); 
     add("how"); 
     add("are u."); 
    } 
}; 

//getter and setter methods 

@Override 
public String toString() { 
    return "User [age=" + age + ", name=" + name + ", " + 
      "messages=" + messages + "]"; 
} 

これは私がしようとしたものです:(readFromFile()はファイルからJSONを取る)

User1[] user2=mapper.readValue(readFromFile(), User1[].class); 

jsonToPojo()は、1つのオブジェクトのみのためにうまく機能しています。私は上記のコード行を試す場合は、そのは、以下のJSONを取っていない:

[ 
{ 
    "age":"23", 
    "messages":["hi","how","are u."], 
    "name":"amal" 
}, 

{ 
    "age":"98", 
    "messages":["Reply","my","question"], 
    "name":"You" 
} 
] 
+1

I私のためにあなたのJSONとあなたのコードが動作するあなたの例をテストしました。 UserクラスとUser1クラスは同じですか?また、2つの異なるクラスを持っていますか? –

+0

user1は新しいクラスです。よく私はpojoにjsonオブジェクトの配列を格納したいと思っています。それは私ができないものです。 – amalBit

答えて

8

はこのような何かを試してみてください:

public class Test { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    User a = new User(23, "amal"); 
    ArrayList<String> message = new ArrayList<String>(); 
    message.add("m1"); 
    message.add("m2"); 
    a.setMessages(message); 

    User b = new User(58, "pete"); 
    User[] ab = new User[] {a, b}; 

    ObjectMapper mapper = new ObjectMapper(); 

    try { 
     String s1 = getJson1(a); 
     System.out.println(s1); 
     User user1 = mapper.readValue(s1, User.class); 
     System.out.println(user1); 

     System.out.println("----------------"); 

     String s2 = getJson2(ab); 
     System.out.println(s2); 
     User[] user2 = mapper.readValue(s2, User[].class); 
     for (User u : user2) 
      System.out.println(u); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

    private static String getJson1(User user) throws JsonProcessingException { 
     ObjectMapper mapper = new ObjectMapper(); 
     return mapper.writeValueAsString(user); 
    } 

    private static String getJson2(User[] ab) throws JsonProcessingException { 
     ObjectMapper mapper = new ObjectMapper(); 
     return mapper.writeValueAsString(ab); 
    } 

} 

public class User { 
    private int    age; 
    private String   name; 
    private ArrayList<String> messages; 

    public User() { 
     super(); 
    } 

    public User(int age, String name) { 
     this(); 
     this.age = age; 
     this.name = name; 
    } 

    // **************** 
    // Getter & Setter .... 
    // **************** 
} 

あなたはこの出力を取得します:

{"age":23,"name":"amal","messages":["m1","m2"]} 
User [age=23, name=amal, messages=[m1, m2]] 
---------------- 
[{"age":23,"name":"amal","messages":["m1","m2"]},{"age":58,"name":"pete","messages":null}] 
User [age=23, name=amal, messages=[m1, m2]] 
User [age=58, name=pete, messages=null] 
+0

これはまさに私が望んでいたものです...とても大変ありがとう@Dennis – amalBit

+0

ありがとう、助けてくれました。それはmapper.readValueの "_user_"クラスの後ろに '[]'を追加するだけで簡単でした。 ..行 – erp