java - JSON - 对象数组中的对象数组

标签 java arrays json gson

我在解析 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"
        }
      }
    ]
  }
]

我已将所需的 Bean 定义为: 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;
    }
}

图像.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;

我无法理解我做错了什么?我在定义 bean 时有什么错误吗?

非常感谢您的帮助。

最佳答案

我假设您不应该在数组中指定对象的名称。替换

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

关于java - JSON - 对象数组中的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9414284/

相关文章:

java - Content Observer onChange 方法在 1 次光标更改后调用两次

c# - 凯撒密码移位(使用字母数组)

android - java.lang.NullPointerException 在 HttpGet httpGet = new HttpGet(url);

.net - 返回没有属性名称的 Json 结果

json - Spark sql 的 from_json 返回空值

java - Spring boot,环境特定属性位置

java - 带有 Java REST 后端的 Emberjs

Java 数组列表 : Adding primitive type or its wrapper-class: What's the difference?

c - 得到了正确的答案,但不知道如何或为什么。需要解释

javascript - 根据对象数组中的键创建对象