Java 使用Map和Normal对象映射JSON

Java 使用Map和Normal对象映射JSON,java,json,hashmap,jackson,Java,Json,Hashmap,Jackson,我得到以下JSON { 'routers': { 'external_gateway_info':{ }, 'description':'', 'gw_port_id':'1f290c84-02fe-4bdb-a063-77a425cc10f5', 'tenant_name':'lmco-test' }, 'tenants':{ '82d1df3fcf

我得到以下JSON

{  
   'routers':
      {  
         'external_gateway_info':{  },
         'description':'',
         'gw_port_id':'1f290c84-02fe-4bdb-a063-77a425cc10f5',
         'tenant_name':'lmco-test'
      },
     'tenants':{  
          '82d1df3fcfc14ac594c6f5c5b6dcad6a':'lmco-test',
          '6eb4b2dd40dc4d63a3c8a691c371dd06':'admin',
          '10b0726823784ceca219821d44a2b5d1':'ivs-perf',
          'VRRP_Service':'VRRP_Service',
          '8fb76703c3084308a01d113751560730':'service'
      }
}
现在,routers是一个简单的对象,我将键/值映射到我的类routers.java,但租户是一个HashMap。 我无法找到一种方法,可以使用单个映射器将路由器和租户映射到单个对象

我的制图器

JSONObject jsonData = new JsonRepresentation(entity).getJsonObject();
RootModel rootModel = mapper.readValue(jsonData.toString(), RootModel.class);
Where Root.java代码段

public class RootModel {

    private Router routers;
    private Tenant tenants;


    public RootModel(@JsonP
...
...
}

您的路由器类将如下:

class Router {

    private String external_gateway_info;
    private String description;
    private String gw_port_id;
    private String tenant_name;

    public String getExternal_gateway_info() {
        return external_gateway_info;
    }

    public void setExternal_gateway_info(String external_gateway_info) {
        this.external_gateway_info = external_gateway_info;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getGw_port_id() {
        return gw_port_id;
    }

    public void setGw_port_id(String gw_port_id) {
        this.gw_port_id = gw_port_id;
    }

    public String getTenant_name() {
        return tenant_name;
    }

    public void setTenant_name(String tenant_name) {
        this.tenant_name = tenant_name;
    }

}
class RootModel {

    private Router routers;
    private HashMap<String, String> tenants;

    public Router getRouters() {
        return routers;
    }

    public void setRouters(Router routers) {
        this.routers = routers;
    }

    public HashMap<String, String> getTenants() {
        return tenants;
    }

    public void setTenants(HashMap<String, String> tenants) {
        this.tenants = tenants;
    }

}
你的根模型会是这样的

class Router {

    private String external_gateway_info;
    private String description;
    private String gw_port_id;
    private String tenant_name;

    public String getExternal_gateway_info() {
        return external_gateway_info;
    }

    public void setExternal_gateway_info(String external_gateway_info) {
        this.external_gateway_info = external_gateway_info;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getGw_port_id() {
        return gw_port_id;
    }

    public void setGw_port_id(String gw_port_id) {
        this.gw_port_id = gw_port_id;
    }

    public String getTenant_name() {
        return tenant_name;
    }

    public void setTenant_name(String tenant_name) {
        this.tenant_name = tenant_name;
    }

}
class RootModel {

    private Router routers;
    private HashMap<String, String> tenants;

    public Router getRouters() {
        return routers;
    }

    public void setRouters(Router routers) {
        this.routers = routers;
    }

    public HashMap<String, String> getTenants() {
        return tenants;
    }

    public void setTenants(HashMap<String, String> tenants) {
        this.tenants = tenants;
    }

}
类根模型{
专用路由器;
私人HashMap租户;
公共路由器getRouters(){
返回路由器;
}
公用路由器(路由器路由器){
这个。路由器=路由器;
}
公共HashMap getTenants(){
返回租户;
}
公共无效设置(哈希映射租户){
这个。租户=租户;
}
}

只要将租户转换为HashMap,它就可以正常工作。希望这能对您有所帮助。

显然,没有更干净的方法可以将一张地图用于此类数据。我所做的是,我使用两个不同的映射器映射路由器和租户