Convert JsonNode into POJO

后端 未结 4 925
梦毁少年i
梦毁少年i 2020-11-30 20:24

This may seem a little unusual, but I am looking for an efficient way to transform/map a JsonNode into a POJO.

I store some of my Model\'s

相关标签:
4条回答
  • 2020-11-30 21:00

    This should do the trick:

    mapper.readValue(fileReader, MyClass.class);
    

    I say should because I'm using that with a String, not a BufferedReader but it should still work.

    Here's my code:

    String inputString = // I grab my string here
    MySessionClass sessionObject;
    try {
        ObjectMapper objectMapper = new ObjectMapper();
        sessionObject = objectMapper.readValue(inputString, MySessionClass.class);
    

    Here's the official documentation for that call: http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(java.lang.String, java.lang.Class)

    You can also define a custom deserializer when you instantiate the ObjectMapper: http://wiki.fasterxml.com/JacksonHowToCustomDeserializers

    Edit: I just remembered something else. If your object coming in has more properties than the POJO has and you just want to ignore the extras you'll want to set this:

        objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    

    Or you'll get an error that it can't find the property to set into.

    0 讨论(0)
  • 2020-11-30 21:01

    If you're using org.codehaus.jackson, this has been possible since 1.6. You can convert a JsonNode to a POJO with ObjectMapper#readValue: http://jackson.codehaus.org/1.9.4/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(org.codehaus.jackson.JsonNode, java.lang.Class)

    
        ObjectMapper mapper = new ObjectMapper();
        JsonParser jsonParser = mapper.getJsonFactory().createJsonParser("{\"foo\":\"bar\"}");
        JsonNode tree = jsonParser.readValueAsTree();
        // Do stuff to the tree
        mapper.readValue(tree, Foo.class);
    
    0 讨论(0)
  • 2020-11-30 21:03
    String jsonInput = "{ \"hi\": \"Assume this is the JSON\"} ";
    com.fasterxml.jackson.databind.ObjectMapper mapper =
        new com.fasterxml.jackson.databind.ObjectMapper();
    MyClass myObject = objectMapper.readValue(jsonInput, MyClass.class);
    

    If your JSON input in has more properties than your POJO has and you just want to ignore the extras in Jackson 2.4, you can configure your ObjectMapper as follows. This syntax is different from older Jackson versions. (If you use the wrong syntax, it will silently do nothing.)

    mapper.disable(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNK‌​NOWN_PROPERTIES);
    
    0 讨论(0)
  • 2020-11-30 21:10

    In Jackson 2.4, you can convert as follows:

    MyClass newJsonNode = jsonObjectMapper.treeToValue(someJsonNode, MyClass.class);
    

    where jsonObjectMapper is a Jackson ObjectMapper.


    In older versions of Jackson, it would be

    MyClass newJsonNode = jsonObjectMapper.readValue(someJsonNode, MyClass.class);
    
    0 讨论(0)
提交回复
热议问题