2016-03-10 30 views
0

我有以下json字符串: -JSON到Java对象returing LinkedHashMap的

{"name":"Test","sortlist":[],"filterlist":[{"fieldname":"regions_id","operator":"equals","value":{"id":1,"code":"HIGH","description":"HIGH Region","comment":"High Region","active":true}}]} 

和Java如下类: -

@JsonSerialize 
@JsonDeserialize 
public class ItemFilter implements Serializable { 

    private String name; 
    private List<FieldFilter> filterlist = new ArrayList<FieldFilter>(); 

} 

public class FieldFilter implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private String fieldname; 
    private String operator; 
    private Object value; 
} 

和我的转换方法如下: -

public static ItemFilter convertItemFilter(String item) { 
     ObjectMapper mapper = new ObjectMapper(); 

     try { 
      ItemFilter itemFilter = mapper.readValue(item, new TypeReference<ItemFilter>(){}); 
      return itemFilter; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
} 

ItemFilter域得到正确,但在private Object value;场转换我得到LinkedHashMap我希望得到一个简单的对象,后来我将类型转换它。

是否有人可以指导我如何逃脱LinkedHashMap并获得变量的简单JavaObject

我不能使用硬编码对象类型,因为它的一个通用POJO其可以具有任何对象类型。硬编码将使这个pojo更大,前端也需要改变它。所以我为什么使用Object作为数据类型。

+0

这是一个问题。如果它转换为对象的类型,然后在那里将它保存'“ID”的值:1,“代码”:“HIGH”,“说明”:“高速区域”,“评论”:“高区”,”主动“:TRUE'? 由于无法找到ID,代码的任何相关领域,...这将其转换为LinkedHashMap中,并在地图上设置这些值。 由于周围的工作,你为什么不创建字段值的** **制定者和呼叫变压器API,它变换是这个LinkedHashMap中成你想要的对象类型? –

回答

-1

下面的类结构应该返回JSON为“YourObject”

public class YourObject{ 
    private String name; 
    private List<String> sortList; 
    private List<Filter> filterList; 

public static class Filter{ 
    private String fieldname; 
    private String operator; 
    private Value value; 

} 
public static class Value{ 
    private Integer id; 
    private String code; 
    private String description; 
    private String comment; 
    private Boolean active; 
} 
} 

然后使用以下读取到的对象:

YourObject itemFilter = mapper.readValue(item, YourObject.class); 
+0

我不能使用它,因为它可以有任何对象类型的泛型pojo。硬编码对象类型无法使用。 –