JSON 以 Integer 作为 Array 属性键名称的 POJO
JSON to POJO with Integer as Array attribute key Name
我有以下 json,它有一个带有 product_id 的产品数组,因为每个 array.Product id 都是数字。当我在网上寻找 pojo 类 时,我得到 Class 以不允许的数字开头的名称。
{
"_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 的任何帮助。提前致谢。
您可以使用 Map
来存储 products
并将其包装在另一个 class 中以存储整个 json。例如。 Product
class 看起来像这样:
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;
}
}
包装器 class 看起来像这样:
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;
}
}
这是 Jackson 的反序列化示例:
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
而不是 _id:
(如果这是实际的字段名称,那么您可以将 JsonProperty
注释更改为 _id:
。
Here 是 Jackson 的文档。
JSON 有效,但您将无法创建 POJO 来表示它。正如您已经看到的,您不能创建以数字开头的 classes,而且您也不想这样做,因为它们不会为您提供任何意义。
我猜products是一个Product数组,那个数字是一个ID什么的。 JSON 应该看起来像这样:
{
"products": [
{
"id": "1234",
"product_name": "xyz",
"product_type": "abc"
},
{
"id": "3456",
"product_name": "zzz",
"product_type": "def"
}]
}
这将反序列化为包含
的 class
private List<Product> products;
假设产品 class 看起来像
class Product {
private Integer id;
@JsonProperty(value = "product_name")
private String productName;
@JsonProperty(value = "product_type")
private String productType;
}
我有以下 json,它有一个带有 product_id 的产品数组,因为每个 array.Product id 都是数字。当我在网上寻找 pojo 类 时,我得到 Class 以不允许的数字开头的名称。
{
"_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 的任何帮助。提前致谢。
您可以使用 Map
来存储 products
并将其包装在另一个 class 中以存储整个 json。例如。 Product
class 看起来像这样:
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;
}
}
包装器 class 看起来像这样:
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;
}
}
这是 Jackson 的反序列化示例:
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
而不是 _id:
(如果这是实际的字段名称,那么您可以将 JsonProperty
注释更改为 _id:
。
Here 是 Jackson 的文档。
JSON 有效,但您将无法创建 POJO 来表示它。正如您已经看到的,您不能创建以数字开头的 classes,而且您也不想这样做,因为它们不会为您提供任何意义。
我猜products是一个Product数组,那个数字是一个ID什么的。 JSON 应该看起来像这样:
{
"products": [
{
"id": "1234",
"product_name": "xyz",
"product_type": "abc"
},
{
"id": "3456",
"product_name": "zzz",
"product_type": "def"
}]
}
这将反序列化为包含
的 classprivate List<Product> products;
假设产品 class 看起来像
class Product {
private Integer id;
@JsonProperty(value = "product_name")
private String productName;
@JsonProperty(value = "product_type")
private String productType;
}