解析与Map <string,type =“”>类似的块的序列

时间:2016-05-30 09:04:39

标签: java json jackson fasterxml

考虑我有这样的json片段(更复杂的json的一部分):

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

即。所有abcbcd等项目都具有相同的内部结构。

是否有任何优雅的方式来对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 个答案:

答案 0 :(得分:-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;
    }
}