Модель привязки данных Джексона для демаршаллинга массива объектов - PullRequest
2 голосов
/ 11 марта 2012

Хорошо, у меня есть файл JSON, и в нем есть набор объектов, которые я хочу разбить на массив объектов.

Пример размещения файла 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 и преобразовать имена в массив, а затем изменить код в классе Data и сделать имена массивом имен объектов, но получил сообщение об ошибке

 Can not deserialize instance of Data out of START_ARRAY token

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

Заранее благодарен за любую помощь

РЕДАКТИРОВАТЬ:

Если мой JSON будет выглядетькак это тогда

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

1 Ответ

4 голосов
/ 11 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...