2012-02-23 64 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字符串作为:

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

我认为你不应该在数组内指定对象的名字。与单纯

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

更换

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

如果你想解析指定的JSON字符串你应该有differen对象结构:

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

谢谢。你让我今天一整天都感觉很好。 – 2012-02-23 14:02:03

1

我认为这可能是你想你的JSON看起来更像

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

也就是说,它可能会得到的“图像”标签混淆了“图片”内阵

+0

ks的答复,但我不生成的JSON,我解析它。所以问题在于bean的定义!我该如何纠正它? – 2012-02-23 13:50:36

+0

我不确定。我认为你需要在你的“图像”对象中有一个“图像”对象,但是这真是混乱和混乱的设计。希望有更多经验的人可以向你展示一个很好的解决方法,但我的解决方案可能只是通过使用更精细的解析器的工作;例如[Jackson](http://jackson.codehaus.org/) 或者,当然,您可以在解析之前手动处理jsonstring。 – 2012-02-23 13:53:34

1

你需要另一个目的是包含图像使得

class Image { 
    String image; Info info; 
} 

class Info { 
    String url, String id; 
}