Example usage for com.fasterxml.jackson.databind KeyDeserializer deserializeKey

List of usage examples for com.fasterxml.jackson.databind KeyDeserializer deserializeKey

Introduction

In this page you can find the example usage for com.fasterxml.jackson.databind KeyDeserializer deserializeKey.

Prototype

public abstract Object deserializeKey(String paramString, DeserializationContext paramDeserializationContext);

Source Link

Usage

From source file:net.nullschool.grains.jackson.datatype.AbstractBasicConstMapDeserializer.java

@Override
public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
    JsonToken token = jp.getCurrentToken();
    if (token == JsonToken.START_OBJECT) {
        token = jp.nextToken();/*  ww w. j  a  va2s  . c  o m*/
    } else if (token != JsonToken.FIELD_NAME) {
        throw ctxt.mappingException(mapType.getRawClass());
    }

    if (token == JsonToken.END_OBJECT) {
        return emptyResult();
    }

    KeyDeserializer kd = keyDeserializer;
    JsonDeserializer<?> vd = valueDeserializer;
    TypeDeserializer vtd = valueTypeDeserializer;

    List<Object> keys = null;
    List<Object> values = null;
    Object key;
    Object value;
    do {
        String name = jp.getCurrentName();
        key = kd == null ? name : kd.deserializeKey(name, ctxt);
        value = jp.nextToken() != JsonToken.VALUE_NULL
                ? vtd == null ? vd.deserialize(jp, ctxt) : vd.deserializeWithType(jp, ctxt, vtd)
                : null;

        token = jp.nextToken();
        if (keys == null) {
            if (token == JsonToken.END_OBJECT) {
                return resultOf(key, value);
            }
            keys = new ArrayList<>();
            values = new ArrayList<>();
        }
        keys.add(key);
        values.add(value);
    } while (token != JsonToken.END_OBJECT);

    return asResult(keys, values);
}

From source file:com.kaaprotech.satu.jackson.SatuDeserializers.java

@Override
public JsonDeserializer<?> findMapDeserializer(final MapType type, final DeserializationConfig config,
        BeanDescription beanDesc, final KeyDeserializer keyDeserializer,
        final TypeDeserializer elementTypeDeserializer, final JsonDeserializer<?> elementDeserializer)
        throws JsonMappingException {

    if (ImmutableMap.class.isAssignableFrom(type.getRawClass())) {
        return new StdDeserializer<Object>(type) {
            private static final long serialVersionUID = 1L;

            @Override// ww w  . j  a va2 s.  c  o m
            public Object deserialize(JsonParser jp, DeserializationContext context) throws IOException {

                JsonToken t = jp.getCurrentToken();
                if (t == JsonToken.START_OBJECT) {
                    t = jp.nextToken();
                }
                if (t != JsonToken.FIELD_NAME && t != JsonToken.END_OBJECT) {
                    throw context.mappingException(type.getRawClass());
                }

                MutableMap<Object, Object> m = Maps.mutable.of();

                for (; jp.getCurrentToken() == JsonToken.FIELD_NAME; jp.nextToken()) {
                    // Pointing to field name
                    String fieldName = jp.getCurrentName();
                    Object key = (keyDeserializer == null) ? fieldName
                            : keyDeserializer.deserializeKey(fieldName, context);
                    t = jp.nextToken();

                    Object value;
                    if (t == JsonToken.VALUE_NULL) {
                        value = null;
                    } else if (elementDeserializer == null) {
                        value = jp.readValueAs(type.getContentType().getRawClass());
                    } else if (elementTypeDeserializer == null) {
                        value = elementDeserializer.deserialize(jp, context);
                    } else {
                        value = elementDeserializer.deserializeWithType(jp, context, elementTypeDeserializer);
                    }
                    m.put(key, value);
                }
                return m.toImmutable();
            }
        };
    }

    return super.findMapDeserializer(type, config, beanDesc, keyDeserializer, elementTypeDeserializer,
            elementDeserializer);
}