JSON到POJO,Integer为Array属性键Name

时间:2017-01-16 22:39:21

标签: java json pojo

我有以下json,其产品数组中包含product_id作为每个数组。产品ID是数字。当我在网上寻找pojo课程时,我得到的课程名称以不允许的数字开头。

 {
        "_id:" : "1234AG567",
        "products" : {
            "1234":{
                "product_name" : "xyz",
                "product_type" : "abc"
            },
            "3456":{
                "product_name" : "zzz",
                "product_type" : "def"
            }
        }
    }

Below are the Pojo classes I am getting 



 public class MyPojo
{
    private Products products;

    public Products getProducts ()
    {
        return products;
    }
public void setProducts (Products products)
{
    this.products = products;
}

@Override
public String toString()
{
    return "ClassPojo [products = "+products+"]";
}

}

public class Products
{
    private 1234 1234;

    private 3456 3456;

    public 1234 get1234 ()
    {
        return 1234;
    }

    public void set1234 (1234 1234)
    {
        this.1234 = 1234;
    }

    public 3456 get3456 ()
    {
        return 3456;
    }

    public void set3456 (3456 3456)
    {
        this.3456 = 3456;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [1234 = "+1234+", 3456 = "+3456+"]";
    }
}
public class 3456
{
    private String product_name;

    private String product_type;

    public String getProduct_name ()
    {
        return product_name;
    }

    public void setProduct_name (String product_name)
    {
        this.product_name = product_name;
    }

    public String getProduct_type ()
    {
        return product_type;
    }

    public void setProduct_type (String product_type)
    {
        this.product_type = product_type;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [product_name = "+product_name+", product_type = "+product_type+"]";
    }
}

public class 1234
{
    private String product_name;

    private String product_type;

    public String getProduct_name ()
    {
        return product_name;
    }

    public void setProduct_name (String product_name)
    {
        this.product_name = product_name;
    }

    public String getProduct_type ()
    {
        return product_type;
    }

    public void setProduct_type (String product_type)
    {
        this.product_type = product_type;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [product_name = "+product_name+", product_type = "+product_type+"]";
    }
}

我使用http://pojo.sodhanalibrary.com/转换

欢迎任何有关如何为此JSON创建pojo的帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用Map存储products并将其包装在另一个类中以存储整个json。例如。 Product类看起来像这样:

class Product {

    @JsonProperty("product_name")
    private String productName;

    @JsonProperty("product_type")
    private String productType;

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getProductType() {
        return productType;
    }

    public void setProductType(String productType) {
        this.productType = productType;
    }
}

Wrapper类看起来像这样:

class ProductList{

    @JsonProperty("_id")
    private String id;

    private Map<String, Product> products;

    public String getId() {
        return id;
    }

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

    public Map<String, Product> getProducts() {
        return products;
    }

    public void setProducts(Map<String, Product> products) {
        this.products = products;
    }
}

以下是杰克逊的反序列化示例:

public static void main(String[] args) throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    ProductList list = mapper.readValue("{\"_id\" : \"1234AG567\",\"products\" : {\"1234\":{\"product_name\" : \"xyz\",\"product_type\" : \"abc\"},\"3456\":{\"product_name\" : \"zzz\",\"product_type\" : \"def\"}}}", ProductList.class);
    System.out.println(list.getId());
    System.out.println(list.getProducts());
}

请注意,您的json内容有拼写错误。我的字段应为_id而不是_id:(如果这是实际的字段名称,则您可以将JsonProperty注释更改为_id:

Here是杰克逊的文档。

答案 1 :(得分:0)

JSON有效,但您无法创建POJO来表示它。就像你已经看过的那样,你不能创建以数字开头的类,你也不想这样做,因为它们对你没有任何意义。

我猜测产品是一个Product数组,而这个数字是ID或其他东西。 JSON看起来应该是这样的:

{
    "products": [
    {
        "id": "1234",
        "product_name": "xyz",
        "product_type": "abc"
    },
    {
        "id": "3456",
        "product_name": "zzz",
        "product_type": "def"
    }]
}

将反序列化为包含

的类
private List<Product> products;

假设Product类看起来像

class Product {
  private Integer id;

  @JsonProperty(value = "product_name")
  private String productName;

  @JsonProperty(value = "product_type")
  private String productType;
}