2013-05-11 12 views
6

Jest to prawdopodobnie zduplikowane pytanie. Proszę zapoznać się z tym link.
Potrafię odwzorować jeden obiekt json na POJO. Ale jak mogę przekonwertować tablicę obiektu json na pojo przy użyciu tego samego frameworku jackson.Konwersja macierzy JSON na POJO za pomocą narzędzia odwzorowującego obiekt Jackson

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(); 
    } 
} 

To jest obiekt klasy użytkownika.

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 + "]"; 
} 

To co próbowałem zrobić: (readFromFile() wykonuje json z pliku)

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

jsonToPojo() działa dobrze tylko dla jednego obiektu. Jednakże, jeśli próbuję powyższy wiersz kodu, jego nie przyjmują następującą json:

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

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

I przetestowałem twój przykład JSON i twój kod działa dla mnie. Czy klasy użytkownika i użytkownika 1 są takie same lub masz dwie różne klasy? –

+0

user1 to nowa klasa. dobrze chcę przechowywać tablicę obiektu json w pojo .. to, czego nie jestem w stanie. – amalBit

Odpowiedz

8

spróbować czegoś takiego:

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 .... 
    // **************** 
} 

Dostaniesz ten wyjściowe:

{"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

Dokładnie tego chciałem ... dziękuję bardzo @Dennis – amalBit

+0

Dzięki, pomógł mi również .. To było tak proste, jak dodanie '[]' za moją "_user_" klasy w 'mapper.readValue. ... linia – erp

Powiązane problemy