2013-05-11 2 views
6

Возможно, это дублированный вопрос .. обратитесь к этому link.
Я могу сопоставить один объект json с POJO. Но как я могу преобразовать массив объекта json в pojo, используя ту же структуру jackson.Преобразование массива JSON в POJO с использованием карт-адаптера 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(); 
    } 
} 

Это объект пользователя класса.

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() хорошо работает только для одного объекта. Однако, если я попробовать эту строку кода, его не принимает следующий JSON:

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

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

I проверили ваш пример JSON, и ваш код работает для меня. Являются ли классы User и User1 одинаковыми или у вас есть два разных класса? –

+0

user1 - новый класс. ну, я хочу сохранить массив json-объекта в pojo .. thats, что я не могу. – 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

Это именно то, что я хотел ... поблагодарить u so much @Dennis – amalBit

+0

Спасибо, Помогли мне также .. Это было так же просто, как добавить '[]' за мой класс _user_ в 'mapper.readValue. ..' line – erp

Смежные вопросы