2012-03-11 3 views
2

Хорошо, у меня есть файл JSON, и у него есть набор объектов, которые я хочу размонтировать в массив объектов.Модель привязки данных Jackson Data Unmarshalling array

Пример того, как файл в формате JSON выложена является:

{ 
"data":{ 
    "name":{ 
    "fName":"John", 
    "lName":"Doe" 
    }, 
    "name":{ 
    "fName":"James", 
    "lName":"Dokes" 
    } 
} 
} 

Полный файл JSON является гораздо более сложным, чем это, это просто пример того, как он выкладывается.

Что я хочу сделать, это взять эти имена и развязать их в массив объектов имен, чтобы я мог получить доступ к каждому объекту имени всякий раз, когда захочу.

классы создаются как

испытаний Класс

private Data data; 

public void setData(Data d) { 
    data = d; 
} 

public Data getData() { 
    return data; 
} 

public String toString() { 
    return "" + data; 
} 

данных Класс

private Name name; 

public void setName(Name n){ 
    name = n; 
} 


public Name getName(){ 
    return name; 
} 


public String toString(){ 
    return "Names " + name; 
} 

Тогда класс Name просто

public class Name { 

private String fName; 
private String lName; 

//Getter setters here 

    public String toString(){ 
    return "\nFirstName: " + fName + "\nLastName: " + lName; 
} 

Затем в главном классе , Я просто

ObjectMapper mapper = new ObjectMapper(); 

    Test test = mapper.readValue(new File("C:\\JSON\\test.json"), 
      Test.class); 
    System.out.println(test); 

Теперь это напечатает

Names 
FirstName: James 
LastName: Dokes 

Но она игнорирует первый объект имени, то есть Джон Доу. Я хочу, чтобы взять каждый из этих объектов имен и поместить их в ArrayList, таким образом я могу получить доступ к информации и отображать ее, когда захочу.

Что я здесь делаю неправильно? Я попытался изменить файл JSON и сделать имена в массив, а затем изменить код в классе данных и создание Имен массива имен объектов, но получил ошибку говоря

Can not deserialize instance of Data out of START_ARRAY token 

ли кто-нибудь сможет указать я в правильном направлении здесь, как и многие другие решения, но не добился успеха.

Заранее спасибо за любую помощь

EDIT:

Должен ли мой JSON выглядеть следующим образом тогда

{ 
"data":{ 
    "name":[ 
     { 
     "fName":"John", 
     "lName":"Doe" 
     }, 
     { 
     "fName":"test", 
     "lName":"test2" 
    } 
    ] 
} 
} 

ответ

4

Что вы публикуемый не совсем корректными JSON как data объекта имеет два ключа с тем же значением name. Вернее, этот JSON не представляет собой массив имен, так как ваш заголовок подсказывает, что он должен.

Если JSON data предназначен для истинного объекта JSON, что означает, что он похож на хэш-таблицу имен на значения, то вы должны представлять, чем в вашем классе Java, как Map. Но у вашего Test класс есть одно поле Data, в котором есть одно поле Name. Один экземпляр Test не может иметь более одной Name в этой структуре.

+0

Хорошо, я быстро обновил сообщение.Должен ли мой JSON выглядеть так, как я обновил свой пост? – AdamM

+3

, что JSON выглядит более логичным. Чтобы сопоставить это с Java POJO, вам нужно представить массив 'name' как' List 'в вашем классе Data. –

+0

Большое спасибо, он отлично работает сейчас! – AdamM