【问题标题】:JsonArray field in a JsonObject to Java ObjectJsonObject 中的 JsonArray 字段到 Java 对象
【发布时间】:2020-06-01 11:18:55
【问题描述】:

以下是我的 JSON 数据。我想将其转换为 POJO,以将名称、id、职业存储在头表中,并将相应的 Jsonarray 字段存储在子表中。

JSON:
{
  "Name": "Bob",
  "id": 453345,
  "Profession": "Clerk",
  "Orders": [
    {
      "Item": "Milk",
      "Qty": 3
    },
    {
      "Item": "Bread",
      "Qty": 3
    }
  ]
}

Entity classes:

public class User {
        private String name;
        private Integer id;
        private String Profession;
        private JsonArray Orders;
        private UserCart userCart;

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getProfession() {
            return Profession;
        }
        public void setProfession(String profession) {
            Profession = profession;
        }
        public JsonArray getOrders() {
            return Orders;
        }
        public void setOrders(JsonArray orders) {
            Orders = orders;
        }
        public UserCart getUserCart() {
            return userCart;
        }
        public void setUserCart(UserCart userCart) {
            this.userCart = userCart;
        }
    }

public class UserCart {
    private String item;
    private Integer qty;
    public String getItem() {
        return item;
    }
    public void setItem(String item) {
        this.item = item;
    }
    public Integer getQty() {
        return qty;
    }
    public void setQty(Integer qty) {
        this.qty = qty;
    }
}

但是当我在下面做的时候;我收到错误

无法反序列化 START_ARRAY 之外的 org.json.JSONArray 实例 令牌

User user = new User();

JsonNode data = new ObjectMapper().readTree(jsonString);

user = headerMap.readValue(data.toString(), User.class);

如何将整个 JSON 分配给两个 Java 对象?

【问题讨论】:

  • 你应该有一个类Order和字段private List<Order> orders。顺便说一句,请跳到 Java 代码约定,并在 camelCase 中有变量名。
  • @Seelenvirtuose 谢谢伙计。这对我有用!我只是手动编写了那个类来模拟我的实际数据,所以不能遵守约定。但真的很棒的小费(y)

标签: java json jackson pojo


【解决方案1】:

使用List<UserCart> 表示json 中的数组数据,使用@JsonProperty 将不同的json 节点名称映射到java 对象字段。不再需要使用额外的字段 (JsonArray Orders)。

@JsonProperty("Orders")
private List<UserCart> userCart;

【讨论】:

  • 非常感谢。有效。 JsonProperty 提示确实有助于使用不同的字段名称进行实体映射。干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
相关资源
最近更新 更多