如何在java中使用jackson在Json中动态更改Key的值

时间:2016-10-27 02:58:03

标签: java json jackson

下面是我使用java使用jackson解析的json字符串,其中存储数组值将根据区域,美国,英国或任何地区动态变化。如何处理这些对象

{
"serviceType": {
    "US - Northern California 1": [
      {
        "serviceName": "Virtual Private Cloud",
        "tenantType": "VP",
        "licenseType": "EDUCATIONAL",
        "description": "Virtual Private Cloud",
        "defaultFlag": "N",
        "tooltip": "",
        "storage": [
          {
            "ACC STORAGE": {
              "storageName": "SSD Accelerated Storage",
              "terms": [
                [
                  "12 months",
                  "12_MTH",
                  [
                    "Prepaid",
                    "Monthly"
                  ],
                  "N"
                ]
              ]
            }
          }
        ]
      }
    ],
    "US - New Jersey 1": [
      {
        "serviceName": "Air Dedicated Cloud",
        "tenantType": "DCP",
        "licenseType": "EDUCATIONAL",
        "description": "Air Dedicated Cloud",
        "defaultFlag": "N",
        "tooltip": "",
        "storage": [
          {
            "STD STORAGE": {
              "storageName": "Standard Storage",
              "terms": [
                [
                  "12 months",
                  "12_MTH",
                  [
                    "Monthly",
                    "Prepaid"
                  ]
              ]
            ]
            }
          }
        ]
      }
        ]

    }
}

我的问题是:我如何访问“存储”的内容,因为“ACC STORAGE”,“STD STORAGE”等都是动态值?

  public class ServiceType 
{
    @JsonProperty("US - Northern California 1")
    public List<serviceTypes> USNorthernCalifornia1;
    @JsonProperty("US - New Jersey 1")
    public List<serviceTypes> uSNewJersey1;

     //getters and setters
}

public class serviceTypes
{
   public class serviceTypes 
{
    @JsonProperty("serviceName")
    public String serviceName;
    @JsonProperty("tenantType")
    public String tenantType;
    @JsonProperty("licenseType")
    public String licenseType;
    @JsonProperty("description")
    public String description;
    @JsonProperty("defaultFlag")
    public String defaultFlag;
    @JsonProperty("tooltip")
    public String tooltip;
    @JsonProperty("storage")
    public List<Storage> storage = new ArrayList<Storage>();
 //getters and setters
}

public class storage
{

}

类存储空白,因为我很困惑,因为值会动态变化而声明

请帮帮我。提前谢谢

3 个答案:

答案 0 :(得分:1)

通常这意味着某些属性使用基本Map来包含值(其中键可以是任意字符串),而不是仅使用POJO。 Map值仍可以是POJO,以及MapList s。

答案 1 :(得分:0)

继续编写Storage类。杰克逊将通过Objectmapper将值自动映射到您的存储列表中。

一种解决方案可能是继承。您需要具有不同&#34; ID&#34;的多个班级。但是属性相同。

答案 2 :(得分:0)

我只想使用Map

public class ServiceTypes {

    private List<Map<String, Storage>> storage;

    // other fields ommited
}

Storage课程现在将成为:

public class ServiceTypes {

    private String storageName;

    // etc
}

我已将字段的可见性更改为private,您需要相应的getter和setter。