Example usage for com.fasterxml.jackson.databind ObjectMapper treeToValue

List of usage examples for com.fasterxml.jackson.databind ObjectMapper treeToValue

Introduction

In this page you can find the example usage for com.fasterxml.jackson.databind ObjectMapper treeToValue.

Prototype

@SuppressWarnings("unchecked")
@Override
public <T> T treeToValue(TreeNode n, Class<T> valueType) throws JsonProcessingException 

Source Link

Document

Convenience conversion method that will bind data given JSON tree contains into specific value (usually bean) type.

Usage

From source file:com.basistech.rosette.dm.json.plain.JsonTest.java

@Test
public void testForwardCompatibilityNoisy() throws Exception {
    ObjectMapper mapper = objectMapper();
    JsonNode tree = mapper.valueToTree(referenceTextOldEntities);
    ObjectNode attributes = (ObjectNode) tree.get("attributes");
    ObjectNode extendedObject = attributes.putObject("novelty");
    extendedObject.put("type", "novelty");
    extendedObject.put("startOffset", 4);
    extendedObject.put("endOffset", 8);
    extendedObject.put("color", "pari");

    AnnotatedText read = mapper.treeToValue(tree, AnnotatedText.class);
    BaseAttribute novelty = read.getAttributes().get("novelty");
    assertNotNull(novelty);//  ww  w  .j  ava 2 s.co  m
    assertEquals(4, novelty.getExtendedProperties().get("startOffset"));
    assertEquals(8, novelty.getExtendedProperties().get("endOffset"));
    assertEquals("pari", novelty.getExtendedProperties().get("color"));
}

From source file:com.basistech.rosette.dm.json.plain.JsonTest.java

@Test
public void testForwardCompatibilitySimple() throws Exception {
    ObjectMapper mapper = objectMapper();
    AnnotatedText.Builder builder = new AnnotatedText.Builder();
    builder.data(THIS_IS_THE_TERRIER_SHOT_TO_BOSTON);
    AnnotatedText simpleText = builder.build();

    JsonNode tree = mapper.valueToTree(simpleText);
    ObjectNode attributes = (ObjectNode) tree.get("attributes");
    ObjectNode extendedObject = attributes.putObject("novelty");
    extendedObject.put("type", "novelty");
    extendedObject.put("startOffset", 4);
    extendedObject.put("endOffset", 8);
    extendedObject.put("color", "pari");

    AnnotatedText read = mapper.treeToValue(tree, AnnotatedText.class);
    BaseAttribute novelty = read.getAttributes().get("novelty");
    assertNotNull(novelty);/* w  w w  .j  a v  a 2s . com*/
    assertEquals(4, novelty.getExtendedProperties().get("startOffset"));
    assertEquals(8, novelty.getExtendedProperties().get("endOffset"));
    assertEquals("pari", novelty.getExtendedProperties().get("color"));
}

From source file:com.basistech.rosette.dm.json.plain.JsonTest.java

@Test
@SuppressWarnings("unchecked")
public void testForwardCompatibilityList() throws Exception {
    ObjectMapper mapper = objectMapper();
    AnnotatedText.Builder builder = new AnnotatedText.Builder();
    builder.data(THIS_IS_THE_TERRIER_SHOT_TO_BOSTON);
    AnnotatedText simpleText = builder.build();

    JsonNode tree = mapper.valueToTree(simpleText);
    ObjectNode attributes = (ObjectNode) tree.get("attributes");
    ObjectNode extendedObject = attributes.putObject("novelty");
    extendedObject.put("type", "list");
    extendedObject.put("itemType", "noveltyItem");
    ArrayNode items = extendedObject.putArray("items");
    ObjectNode item0 = items.addObject();
    item0.put("startOffset", 4);
    item0.put("endOffset", 8);
    item0.put("color", "pari");
    ObjectNode item1 = items.addObject();
    item1.put("startOffset", 10);
    item1.put("endOffset", 12);
    item1.put("color", "off");

    AnnotatedText read = mapper.treeToValue(tree, AnnotatedText.class);
    ListAttribute<BaseAttribute> novelty = (ListAttribute<BaseAttribute>) read.getAttributes().get("novelty");
    assertNotNull(novelty);/*from  www  .  j  a  va  2  s  .com*/
    assertEquals(2, novelty.size());
    BaseAttribute item = novelty.get(0);
    assertEquals(4, item.getExtendedProperties().get("startOffset"));
    assertEquals(8, item.getExtendedProperties().get("endOffset"));
    assertEquals("pari", item.getExtendedProperties().get("color"));

    item = novelty.get(1);
    assertEquals(10, item.getExtendedProperties().get("startOffset"));
    assertEquals(12, item.getExtendedProperties().get("endOffset"));
    assertEquals("off", item.getExtendedProperties().get("color"));

}

From source file:com.spankingrpgs.model.GameState.java

/**
 * Loads the data encoded in the passed in JSON into this state.
 *
 * @param stateToLoad The JSON string to load into this state
 *//*from w  w w  .  j ava 2  s  . c o m*/
@SuppressWarnings("unchecked")
public void load(String stateToLoad) throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    JsonNode rootNode;
    try {
        rootNode = mapper.readValue(stateToLoad, JsonNode.class);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    loadPlayerCharacter(rootNode.get("playerCharacter"));
    loadKeywords(rootNode.get("keywords"));
    setNumTimesLost(rootNode.get("numTimesLost").asInt());
    setEpisodeNumber(rootNode.get("episodeNumber").asInt());
    setDayNumber(rootNode.get("dayNumber").asInt());
    setActivityLength(rootNode.get("activityLength").asInt());
    setAttritionRate(AttritionRate.valueOf(rootNode.get("attritionRate").asText()));
    setArtificialIntelligenceLevel(
            ArtificialIntelligenceLevel.valueOf(rootNode.get("artificialIntelligenceLevel").asText()));
    setPlayerSpankable(rootNode.get("playerSpankable").asBoolean());
    setSpankerGender(Gender.valueOf(rootNode.get("spankerGender").asText()));
    setSpankeeGender(Gender.valueOf(rootNode.get("spankeeGender").asText()));
    setMusic(rootNode.get("music") == null ? null : rootNode.get("music").asText());

    Options.setGenderForRole(SpankingRole.SPANKER, getSpankerGender());
    Options.setGenderForRole(SpankingRole.SPANKEE, getSpankeeGender());
    loadPreviousVillains(rootNode.get("previousVillains"));
    loadCurrentEvent(rootNode.get("currentEventName"));
    loadParty(rootNode.get("party"));
    loadCharacterGender(rootNode.get("characterGender"));
    try {
        setCurrentEventText((List<String>) mapper.treeToValue(rootNode.get("currentEventText"), List.class));
        setGameTime(mapper.treeToValue(rootNode.get("gameTime"), Calendar.class));
    } catch (JsonProcessingException e) {
        String msg = String.format("Experienced an error while loading node %s: %s",
                rootNode.get("gameTime").toString(), e);
        LOG.log(Level.SEVERE, msg);
        throw new RuntimeException(msg, e);
    }
}

From source file:io.coala.json.DynaBean.java

/**
 * @param referenceType//from  ww  w.j  a  va  2s.  c o m
 * @param <S>
 * @param <T>
 * @return
 */
static final <S, T> JsonDeserializer<T> createJsonDeserializer(final ObjectMapper om, final Class<T> resultType,
        final Properties... imports) {
    return new JsonDeserializer<T>() {

        @Override
        public T deserializeWithType(final JsonParser jp, final DeserializationContext ctxt,
                final TypeDeserializer typeDeserializer) throws IOException, JsonProcessingException {
            return deserialize(jp, ctxt);
        }

        @Override
        public T deserialize(final JsonParser jp, final DeserializationContext ctxt)
                throws IOException, JsonProcessingException {
            if (jp.getCurrentToken() == JsonToken.VALUE_NULL)
                return null;

            //            if( Wrapper.class.isAssignableFrom( resultType ) )
            //            {
            //               // FIXME
            //               LOG.trace( "deser wrapper intf of {}", jp.getText() );
            //               return (T) Wrapper.Util.valueOf( jp.getText(),
            //                     resultType.asSubclass( Wrapper.class ) );
            //            } 
            if (Config.class.isAssignableFrom(resultType)) {
                final Map<String, Object> entries = jp.readValueAs(new TypeReference<Map<String, Object>>() {
                });

                final Iterator<Entry<String, Object>> it = entries.entrySet().iterator();
                for (Entry<String, Object> next = null; it.hasNext(); next = it.next())
                    if (next != null && next.getValue() == null) {
                        LOG.trace("Ignoring null value: {}", next);
                        it.remove();
                    }
                return resultType.cast(ConfigFactory.create(resultType.asSubclass(Config.class), entries));
            }
            // else if (Config.class.isAssignableFrom(resultType))
            // throw new JsonGenerationException(
            // "Config does not extend "+Mutable.class.getName()+" required for deserialization: "
            // + Arrays.asList(resultType
            // .getInterfaces()));

            // can't parse directly to interface type
            final DynaBean bean = new DynaBean();
            final TreeNode tree = jp.readValueAsTree();

            // override attributes as defined in interface getters
            final Set<String> attributes = new HashSet<>();
            for (Method method : resultType.getMethods()) {
                if (method.getReturnType().equals(Void.TYPE) || method.getParameterTypes().length != 0)
                    continue;

                final String attribute = method.getName();
                if (attribute.equals("toString") || attribute.equals("hashCode"))
                    continue;

                attributes.add(attribute);
                final TreeNode value = tree.get(attribute);// bean.any().get(attributeName);
                if (value == null)
                    continue;

                bean.set(method.getName(),
                        om.treeToValue(value, JsonUtil.checkRegistered(om, method.getReturnType(), imports)));
            }
            if (tree.isObject()) {
                // keep superfluous properties as TreeNodes, just in case
                final Iterator<String> fieldNames = tree.fieldNames();
                while (fieldNames.hasNext()) {
                    final String fieldName = fieldNames.next();
                    if (!attributes.contains(fieldName))
                        bean.set(fieldName, tree.get(fieldName));
                }
            } else if (tree.isValueNode()) {
                for (Class<?> type : resultType.getInterfaces())
                    for (Method method : type.getDeclaredMethods()) {
                        //                     LOG.trace( "Scanning {}", method );
                        if (method.isAnnotationPresent(JsonProperty.class)) {
                            final String property = method.getAnnotation(JsonProperty.class).value();
                            //                        LOG.trace( "Setting {}: {}", property,
                            //                              ((ValueNode) tree).textValue() );
                            bean.set(property, ((ValueNode) tree).textValue());
                        }
                    }
            } else
                throw ExceptionFactory.createUnchecked("Expected {} but parsed: {}", resultType,
                        tree.getClass());

            return DynaBean.proxyOf(om, resultType, bean, imports);
        }
    };
}