JSON - Массив объектов в массиве объектов - PullRequest
1 голос
/ 23 февраля 2012

У меня проблемы с анализом строки JSON.JSON указан ниже:

[
  {
    "firstname": "firstname",
    "lastname": "lastname",
    "address": "address",
    "images": [
      {
        "image": {          
          "url": "url",
          "id": "id"
        }
      },
      {
        "image": {
          "url": "url",
          "id": "id"
        }
      }
    ]
  },
  {
    "firstname": "firstname",
    "lastname": "lastname",
    "address": "address",
    "images": [
      {
        "image": {          
          "url": "url",
          "id": "id"
        }
      },
      {
        "image": {
          "url": "url",
          "id": "id"
        }
      }
    ]
  }
]

Я определил требуемые Бины как: Person.java

public class Person implements Serializable {
    private static final long serialVersionUID = 38L;

    private String firstname;
    private String lastname;
    private String address;
    private Image[] images;

    public Person() {

    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Image[] getImages() {
        return images;
    }

    public void setImages(Image[] images) {
        this.images = images;
    }
}

Image.java:

public class Image implements Serializable {
    private static final long serialVersionUID = 39L;

    private String url;
    private String id;

    public Image() {

    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }       
}

Теперь яЯ анализирую строку JSON как:

Gson gson = new Gson(); 
Person[] persons = (Person[])gson.fromJson(jsonString, Person[].class);

Теперь, если я печатаю

System.out.println(persons[0].getFirstname());
System.out.println(persons[0].getLastname());
System.out.println(persons[0].getAddress());

, он печатает соответствующие значения.Также:

persons[0].getImages() is not null;
persons[0].getImages()[0] is not null;

но

persons[0].getImages()[0].getUrl() is null;
persons[0].getImages()[0].getId() is null;

Я не могу понять, что я делаю неправильно?Есть ли какая-то ошибка, которую я допустил при определении бобов?

Я очень ценю вашу помощь.

Ответы [ 3 ]

3 голосов
/ 23 февраля 2012

Я предполагаю, что вы не должны указывать имя объекта внутри массива. Заменить

"image": {          
    "url": "url",
    "id": "id"
}

с просто

{          
    "url": "url",
    "id": "id"
}

Если вы хотите проанализировать указанную строку JSON, у вас должна быть другая структура объекта:

public class Person implements Serializable {
    private static final long serialVersionUID = 38L;

    private String firstname;
    private String lastname;
    private String address;
    private Foo[] images;
}

public class Foo{
    private Image image;
}
public class Image implements Serializable {
    private static final long serialVersionUID = 39L;

    private String url;
    private String id;
}
1 голос
/ 23 февраля 2012

Вам понадобится другой объект, чтобы содержать изображение, такое, что

class Image {
   String image; Info info;
}

class Info {
  String url, String id;
}
1 голос
/ 23 февраля 2012

Я думаю, что вы, вероятно, хотите, чтобы ваш JSON выглядел больше как

[
  {
    "firstname": "firstname",
    "lastname": "lastname",
    "address": "address",
    "images": [   
      {
          "url": "url",
          "id": "id"
      }...

То есть он может быть сбит с толку тегом "image" в массиве "images"

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