2016-05-30 78 views
2

考虑我有这样json片段(更复杂的JSON的一部分):解析序列

"foo": { 
    "abc": { 
     "prop1": "blabla11"; 
     "prop2": "blabla12"; 
     "prop3": "blabla13"; 
    }, 
    "bcd": { 
     "prop1": "blabla21"; 
     "prop2": "blabla22"; 
     "prop3": "blabla23"; 
    }, 
    ... 
} 

即全部abc,bcd等项目具有相同的内部结构。

是否有任何优雅的方式来注释以下java结构,以便通过jackson解析它到Foo类的对象?

注意:foo不是根结构,所以我不能单独解析它。

public class Foo {  
    private Map<String, FooItem> items; 
    ...   
} 

public class FooItem { 
    private String prop1; 
    private String prop2; 
    private String prop3; 
    ... 
} 

回答

-1

定义一个更大的结构,您可以使用它读取更复杂的JSON。使用@JsonIgnoreProperties忽略任何未知的位。

试试这个:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class LargerStructure { 

    private Foo foo; 

    public Foo getFoo() { 
     return foo; 
    } 

    public void setFoo(Foo foo) { 
     this.foo = foo; 
    } 
} 


public class App { 

    public static void main(String ...args){ 

     File input = new File("largerInput.json"); 
     LargerStructure largerStructure = deserialise(input); 
     System.out.println(largerStructure.getFoo()); 
    } 


    public static LargerStructure deserialise(File input){ 

     LargerStructure largerStructure = null; 

     try { 

      ObjectMapper mapper = new ObjectMapper(); 
      largerStructure = mapper.readValue(input, LargerStructure.class); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return largerStructure; 
    } 
} 
+0

这将如何帮助我分析'Foo'的结构'地图<字符串,FooItem>'? – Andremoniy

+0

你的问题是如何解析片段到Foo对象,其中foo元素不是根。答案中的代码将做到这一点。如果仍有问题,请确保您已为Foo和FooItem类的成员变量提供了正确的访问器方法。 – maccaroo

+0

它会填写地图'Map '?你试过了吗? – Andremoniy