2012-02-23 4 views
1

У меня возникли проблемы с обработкой строки JSON. 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 as:

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

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

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

Спасибо. Вы сделали мой день. –

1

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

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

То есть, это может быть путается в «образ» тег в пределах «изображений» массив

+0

Than ks для ответа, но я не создаю JSON, я разбираю его. Таким образом, проблема заключается в определении bean-компонента! Как я могу это исправить? –

+0

Я не уверен. Я думаю, что вам нужно иметь объект «изображения» в объекте «изображение», но это действительно грязный и запутанный дизайн. Надеюсь, что кто-то еще с большим опытом может показать вам хороший способ обойти это, но мое решение, вероятно, состояло бы в том, чтобы просто проделать работу с использованием более гранулярного анализатора; например [Jackson] (http://jackson.codehaus.org/) Или, конечно же, вы можете вручную обработать jsonstring перед его разбором. –

1

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

class Image { 
    String image; Info info; 
} 

class Info { 
    String url, String id; 
} 
Смежные вопросы