Example usage for com.fasterxml.jackson.core JsonToken END_ARRAY

List of usage examples for com.fasterxml.jackson.core JsonToken END_ARRAY

Introduction

In this page you can find the example usage for com.fasterxml.jackson.core JsonToken END_ARRAY.

Prototype

JsonToken END_ARRAY

To view the source code for com.fasterxml.jackson.core JsonToken END_ARRAY.

Click Source Link

Document

END_ARRAY is returned when encountering ']' which signals ending of an Array value

Usage

From source file:org.mstc.zmq.json.Decoder.java

@SuppressWarnings("unchecked")
public static void decode(String input, Field[] fields, Object b) throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    mapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
    if (logger.isDebugEnabled())
        logger.debug(input);//from  w  ww. j  av a 2 s . co  m
    JsonFactory factory = mapper.getFactory();
    try (JsonParser jp = factory.createParser(input)) {
        /* Sanity check: verify that we got "Json Object" */
        if (jp.nextToken() != JsonToken.START_OBJECT) {
            throw new IOException("Expected data to start with an Object");
        }

        /* Iterate over object fields */
        while (jp.nextToken() != JsonToken.END_OBJECT) {
            String fieldName = jp.getCurrentName();
            jp.nextToken();
            Field field = getField(fieldName, fields);
            if (field == null) {
                throw new IOException(
                        "Could not find field [" + fieldName + "] on class " + b.getClass().getName());
            }
            try {
                if (field.getType().isAssignableFrom(List.class)) {
                    String adder = getAdder(fieldName);
                    TypeFactory t = TypeFactory.defaultInstance();
                    ParameterizedType listType = (ParameterizedType) field.getGenericType();
                    Class<?> listClass = (Class<?>) listType.getActualTypeArguments()[0];
                    List list = mapper.readValue(jp.getValueAsString(),
                            t.constructCollectionType(List.class, listClass));
                    Method m = b.getClass().getDeclaredMethod(adder, Collection.class);
                    m.invoke(b, list);
                } else if (field.getType().isArray()) {
                    Class<?> type = field.getType();
                    String setter = getSetter(fieldName);
                    Method m = b.getClass().getDeclaredMethod(setter, field.getType());
                    logger.info("Field {} is array of {}[], {}, using method {}", field.getName(),
                            field.getType().getComponentType(), jp.getCurrentToken().name(), m);
                    if (jp.getCurrentToken().id() == JsonToken.START_ARRAY.id()) {
                        List list = new ArrayList();
                        while (jp.nextToken() != JsonToken.END_ARRAY) {
                            String value = jp.getText();
                            switch (jp.getCurrentToken()) {
                            case VALUE_STRING:
                                list.add(value);
                                break;
                            case VALUE_NUMBER_INT:
                                if (type.getComponentType().isAssignableFrom(double.class)) {
                                    list.add(Double.parseDouble(value));
                                } else if (type.getComponentType().isAssignableFrom(float.class)) {
                                    list.add(Float.parseFloat(value));
                                } else {
                                    list.add(Integer.parseInt(value));
                                }
                                break;
                            case VALUE_NUMBER_FLOAT:
                                logger.info("Add float");
                                list.add(jp.getFloatValue());
                                break;
                            case VALUE_NULL:
                                break;
                            default:
                                logger.warn("[3] Not sure how to handle {} yet", jp.getCurrentToken().name());
                            }
                        }
                        Object array = Array.newInstance(field.getType().getComponentType(), list.size());
                        for (int i = 0; i < list.size(); i++) {
                            Object val = list.get(i);
                            Array.set(array, i, val);
                        }
                        m.invoke(b, array);
                    } else {
                        if (type.getComponentType().isAssignableFrom(byte.class)) {
                            m.invoke(b, jp.getBinaryValue());
                        }
                    }
                } else {
                    String setter = getSetter(fieldName);
                    logger.debug("{}: {}", setter, field.getType().getName());
                    Method m = b.getClass().getDeclaredMethod(setter, field.getType());

                    switch (jp.getCurrentToken()) {
                    case VALUE_STRING:
                        m.invoke(b, jp.getText());
                        break;
                    case VALUE_NUMBER_INT:
                        m.invoke(b, jp.getIntValue());
                        break;
                    case VALUE_NUMBER_FLOAT:
                        m.invoke(b, jp.getFloatValue());
                        break;
                    case VALUE_NULL:
                        logger.debug("Skip invoking {}.{}, property is null", b.getClass().getName(),
                                m.getName());
                        break;
                    case START_OBJECT:
                        StringBuilder sb = new StringBuilder();
                        while (jp.nextToken() != JsonToken.END_OBJECT) {
                            switch (jp.getCurrentToken()) {
                            case VALUE_STRING:
                                sb.append("\"").append(jp.getText()).append("\"");
                                break;
                            case FIELD_NAME:
                                if (sb.length() > 0)
                                    sb.append(",");
                                sb.append("\"").append(jp.getText()).append("\"").append(":");
                                break;
                            case VALUE_NUMBER_INT:
                                sb.append(jp.getIntValue());
                                break;
                            case VALUE_NUMBER_FLOAT:
                                sb.append(jp.getFloatValue());
                                break;
                            case VALUE_NULL:
                                sb.append("null");
                                break;
                            default:
                                logger.warn("[2] Not sure how to handle {} yet", jp.getCurrentToken().name());
                            }
                        }
                        String s = String.format("%s%s%s", JsonToken.START_OBJECT.asString(), sb.toString(),
                                JsonToken.END_OBJECT.asString());
                        Object parsed = getNested(field.getType(), s.getBytes());
                        m.invoke(b, parsed);
                        break;
                    default:
                        logger.warn("[1] Not sure how to handle {} yet", jp.getCurrentToken().name());
                    }
                }
            } catch (InvocationTargetException | NoSuchMethodException | IllegalAccessException
                    | IllegalArgumentException e) {
                logger.error("Failed setting field [{}], builder: {}", fieldName, b.getClass().getName(), e);
            }
        }
    }
}

From source file:org.tanrabad.survey.service.json.MultiPolygonTypeConverter.java

private Location getLocation(JsonParser jsonParser) throws IOException {
    Location value3;/*from   w  w  w.  j a va2s. com*/
    if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {
        ArrayList<Double> point = new ArrayList<>();
        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
            Double coordinate;
            coordinate = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null
                    : jsonParser.getValueAsDouble();
            point.add(coordinate);
        }
        value3 = new Location(point.get(1), point.get(0));
    } else {
        value3 = null;
    }
    return value3;
}

From source file:com.github.heuermh.ensemblrestclient.JacksonArchivedSequenceConverter.java

static ArchivedSequence parseArchivedSequence(final JsonFactory jsonFactory, final InputStream inputStream)
        throws IOException {
    JsonParser parser = null;/*  ww w .j a  va 2 s . c om*/
    try {
        parser = jsonFactory.createParser(inputStream);
        parser.nextToken();

        String id = null;
        String type = null;
        String assembly = null;
        String release = null;
        String version = null;
        String latest = null;
        String peptide = null;
        boolean current = false;
        List<String> possibleReplacement = new ArrayList<String>();

        while (parser.nextToken() != JsonToken.END_OBJECT) {
            String field = parser.getCurrentName();
            parser.nextToken();

            if ("id".equals(field)) {
                id = parser.getText();
            } else if ("type".equals(field)) {
                type = parser.getText();
            } else if ("assembly".equals(field)) {
                assembly = parser.getText();
            } else if ("release".equals(field)) {
                release = parser.getText();
            } else if ("version".equals(field)) {
                version = parser.getText();
            } else if ("latest".equals(field)) {
                latest = parser.getText();
            } else if ("peptide".equals(field)) {
                peptide = parser.getText();
            } else if ("is_current".equals(field)) {
                current = (Integer.parseInt(parser.getText()) > 0);
            } else if ("possible_replacement".equals(field)) {
                while (parser.nextToken() != JsonToken.END_ARRAY) {
                    possibleReplacement.add(parser.getText());
                }
            }
        }
        return new ArchivedSequence(id, type, assembly, release, version, latest, peptide, current,
                possibleReplacement.toArray(new String[possibleReplacement.size()]));
    } finally {
        try {
            inputStream.close();
        } catch (Exception e) {
            // ignored
        }
        try {
            parser.close();
        } catch (Exception e) {
            // ignored
        }
    }
}

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

@Override
public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
    JsonToken token = jp.getCurrentToken();
    if (token != JsonToken.START_ARRAY) {
        throw ctxt.mappingException(collectionType.getRawClass());
    }//w w  w .j a v a2  s .c  om

    if ((token = jp.nextToken()) == JsonToken.END_ARRAY) {
        return emptyResult();
    }

    JsonDeserializer<?> ed = elementDeserializer;
    TypeDeserializer etd = elementTypeDeserializer;

    List<Object> elements = null;
    Object element;
    do {
        element = token != JsonToken.VALUE_NULL
                ? etd == null ? ed.deserialize(jp, ctxt) : ed.deserializeWithType(jp, ctxt, etd)
                : null;

        token = jp.nextToken();
        if (elements == null) {
            if (token == JsonToken.END_ARRAY) {
                return resultOf(element);
            }
            elements = new ArrayList<>();
        }
        elements.add(element);
    } while (token != JsonToken.END_ARRAY);

    return asResult(elements);
}

From source file:name.gumartinm.weather.information.parser.JPOSCurrentParser.java

private void getCurrentWeatherData(final Current currentWeatherData, final JsonParser jParser)
        throws JsonParseException, IOException {
    if (jParser.nextToken() == JsonToken.START_OBJECT) {

        while (jParser.nextToken() != JsonToken.END_OBJECT) {
            final String fieldname = jParser.getCurrentName();
            final JsonToken nextToken = jParser.nextToken();
            if (nextToken == JsonToken.START_OBJECT) {
                this.getCurrentWeatherDataObjects(currentWeatherData, jParser, fieldname);
            }/*from   ww w.  j  a v a 2 s. co m*/
            if (nextToken == JsonToken.START_ARRAY) {
                JsonToken tokenNext = jParser.nextToken();
                while (tokenNext != JsonToken.END_ARRAY) {
                    if (tokenNext == JsonToken.START_OBJECT) {
                        this.getCurrentWeatherDataObjects(currentWeatherData, jParser, fieldname);
                    }
                    tokenNext = jParser.nextToken();
                }
            }
            if ((nextToken == JsonToken.VALUE_NUMBER_INT) || (nextToken == JsonToken.VALUE_STRING)) {
                this.getCurrentWeatherDataObjects(currentWeatherData, jParser, fieldname);
            }
        }
    }
}

From source file:ai.susi.geo.GeoJsonReader.java

@Override
public void run() {
    // using a streamparser to be able to handle very large input files
    try {// w  w w.  ja  v  a2  s.co m
        JsonToken token;
        while (!parser.isClosed() && (token = parser.nextToken()) != null && token != JsonToken.END_OBJECT) {
            String name = parser.getCurrentName();

            if (JsonToken.FIELD_NAME.equals(token) && "type".equals(name)) {
                parser.nextToken();
                //System.out.println(parser.getText());
                continue;
            }

            if (JsonToken.FIELD_NAME.equals(token) && "features".equals(name)) {
                token = parser.nextToken();
                if (!JsonToken.START_ARRAY.equals(token))
                    break;
                while (!parser.isClosed() && (token = parser.nextToken()) != null
                        && token != JsonToken.END_ARRAY) {
                    Feature feature = new Feature(parser);
                    //System.out.println(feature.toString());
                    try {
                        this.featureQueue.put(feature);
                    } catch (InterruptedException e) {
                        Log.getLog().warn(e);
                    }
                }
            }
        }
    } catch (IOException e) {
        Log.getLog().warn(e);
    } finally {
        for (int i = 0; i < this.concurrency; i++) {
            try {
                this.featureQueue.put(POISON_FEATURE);
            } catch (InterruptedException e) {
            }
        }
    }
}

From source file:com.microsoft.azure.storage.core.JsonUtilities.java

/***
 * Reserved for internal use. Asserts that the token type of the parser is the end of an array.
 * //from  www  .  ja v  a2  s . c  o m
 * @param parser
 *            The {@link JsonParser} whose current token to check.
 */
public static void assertIsEndArrayJsonToken(final JsonParser parser) throws JsonParseException {
    if (!(parser.getCurrentToken() == JsonToken.END_ARRAY)) {
        throw new JsonParseException(SR.EXPECTED_END_ARRAY, parser.getCurrentLocation());
    }
}

From source file:com.microsoft.azure.storage.table.ODataUtilities.java

/***
 * Reserved for internal use. Asserts that the token type of the parser is the end of an array.
 * // w  w w  .ja  va 2  s .c o m
 * @param parser
 *            The {@link JsonParser} whose current token to check.
 */
protected static void assertIsEndArrayJsonToken(final JsonParser parser) throws JsonParseException {
    if (!(parser.getCurrentToken() == JsonToken.END_ARRAY)) {
        throw new JsonParseException(SR.EXPECTED_END_ARRAY, parser.getCurrentLocation());
    }
}

From source file:com.reprezen.swagedit.model.NodeDeserializer.java

protected ArrayNode deserializeArrayNode(JsonParser p, DeserializationContext context,
        JsonLocation startLocation) throws IOException {
    final Model model = (Model) context.getAttribute(ATTRIBUTE_MODEL);
    final AbstractNode parent = (AbstractNode) context.getAttribute(ATTRIBUTE_PARENT);
    final JsonPointer ptr = (JsonPointer) context.getAttribute(ATTRIBUTE_POINTER);

    ArrayNode node = model.arrayNode(parent, ptr);

    int i = 0;// ww w.j ava 2s . co m
    while (p.nextToken() != JsonToken.END_ARRAY) {
        JsonPointer pp = JsonPointer.compile(ptr.toString() + "/" + i);

        context.setAttribute(ATTRIBUTE_PARENT, node);
        context.setAttribute(ATTRIBUTE_POINTER, pp);

        AbstractNode v = deserialize(p, context);

        node.add(v);
        i++;
    }

    node.setStartLocation(createLocation(startLocation));
    node.setEndLocation(createLocation(p.getCurrentLocation()));
    return node;
}

From source file:org.onosproject.north.aaa.api.parser.impl.ScopeParser.java

public Scope jsonToScope(JsonParser jp) throws IOException, ParseException {
    Scope.Builder builder = Scope.builder();

    while (true) {
        JsonToken token = jp.nextToken();
        if (JsonToken.END_OBJECT.equals(token)) {
            // bail out
            break;
        }/* ww w . jav a  2s .  c o m*/

        if (JsonToken.FIELD_NAME.equals(token) && "scopeId".equals(jp.getCurrentName())) {
            jp.nextToken();
            builder.buildScopeId(jp.getText());
        } else if (JsonToken.FIELD_NAME.equals(token) && "scopeDesc".equals(jp.getCurrentName())) {
            jp.nextToken();
            builder.buildScopeDesc(jp.getText());
        } else if (JsonToken.FIELD_NAME.equals(token) && "accesses".equals(jp.getCurrentName())) {
            token = jp.nextToken();
            if (!JsonToken.START_ARRAY.equals(token)) {
                // bail out
                throw new ParseException("expected ARRAY after accesses");
            }
            Set<String> accesses = new HashSet<>();

            while (true) {
                token = jp.nextToken();
                if (JsonToken.END_ARRAY.equals(token)) {
                    // bail out
                    break;
                }
                accesses.add(jp.getText());
            }
            builder.buildRestAccess(accesses);
        }
    }
    return builder.buildAll();
}