List of usage examples for com.fasterxml.jackson.core JsonParser readValueAsTree
@SuppressWarnings("unchecked") public <T extends TreeNode> T readValueAsTree() throws IOException, JsonProcessingException
From source file:com.trenurbanoapp.webapi.WebApiRestClient.java
public AssetsPositionResponse assetsPosition() { HttpClient httpClient = getHttpClient(); HttpGet httpGet = new HttpGet(urlbase + "/asset/position"); getRequestCallback().doWithRequest(httpGet); try {/* w w w . j a va 2s . co m*/ return httpClient.execute(httpGet, response -> { int status = response.getStatusLine().getStatusCode(); if (!(status >= 200 && status < 300)) { return new AssetsPositionResponse(status, response.getStatusLine().getReasonPhrase()); } List<AssetPosition> assets = new ArrayList<>(); final JsonFactory jsonFactory = getObjectMapper().getFactory(); final JsonParser parser = jsonFactory.createParser(response.getEntity().getContent()); JsonToken token; while ((token = parser.nextToken()) != null) { switch (token) { case START_OBJECT: JsonNode node = parser.readValueAsTree(); AssetPosition position = createAssetPosition(node); assets.add(position); if (assetPositionCallback != null) { assetPositionCallback.execute(position); } break; } } return new AssetsPositionResponse(assets); }); } catch (IOException e) { throw new RuntimeException(e); } }
From source file:com.addthis.codec.jackson.CodecBeanDeserializer.java
@Override public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { JsonLocation currentLocation = jp.getTokenLocation(); JsonToken t = jp.getCurrentToken();//from ww w . j ava 2 s . c o m try { if (t == JsonToken.START_OBJECT) { ObjectNode objectNode = jp.readValueAsTree(); handleDefaultsAndRequiredAndNull(ctxt, objectNode); jp = jp.getCodec().treeAsTokens(objectNode); jp.nextToken(); } else if (t == JsonToken.END_OBJECT) { // for some reason this is how they chose to handle single field objects jp.nextToken(); ObjectNode objectNode = ctxt.getNodeFactory().objectNode(); handleDefaultsAndRequiredAndNull(ctxt, objectNode); jp = jp.getCodec().treeAsTokens(objectNode); jp.nextToken(); } Object value = getDelegatee().deserialize(jp, ctxt); if (value instanceof SuperCodable) { ((SuperCodable) value).postDecode(); } return value; } catch (JsonMappingException ex) { throw Jackson.maybeImproveLocation(currentLocation, ex); } }
From source file:data.DefaultExchanger.java
private void importDataFromArray(JsonParser parser, JdbcTemplate jdbcTemplate, int batchSize) throws IOException { int importedNodesCount = 0; final List<JsonNode> nodes = new ArrayList<>(); while (parser.nextToken() != JsonToken.END_ARRAY) { final JsonNode node = parser.readValueAsTree(); nodes.add(node);/*from w w w .ja v a2 s . c o m*/ if (nodes.size() == batchSize) { importedNodesCount += batchUpdate(jdbcTemplate, nodes).length; nodes.clear(); } } if (nodes.size() > 0) { importedNodesCount += batchUpdate(jdbcTemplate, nodes).length; } play.Logger.info("imported {{}} {}", importedNodesCount, getTable()); }
From source file:com.addthis.codec.jackson.CodecTypeDeserializer.java
@Override public Object deserializeTypedFromAny(JsonParser jp, DeserializationContext ctxt) throws IOException { // a jackson thing we might as well include if (jp.canReadTypeId()) { Object typeId = jp.getTypeId(); if (typeId != null) { return _deserializeWithNativeTypeId(jp, ctxt, typeId); }//ww w.j av a2s . c o m } // can use this to approximate error location if a sub-method throws an exception JsonLocation currentLocation = jp.getTokenLocation(); JsonNode jsonNode; // empty objects can appear with END_OBJECT. that has special handling lots of places, but not in readTree if (jp.getCurrentToken() == JsonToken.END_OBJECT) { jsonNode = ctxt.getNodeFactory().objectNode(); } else { jsonNode = jp.readValueAsTree(); } ObjectCodec objectCodec = jp.getCodec(); try { Object bean = null; // _array handler if (jsonNode.isArray()) { bean = _deserializeTypedFromArray((ArrayNode) jsonNode, objectCodec, ctxt); // object handler } else if (jsonNode.isObject()) { bean = _deserializeTypedFromObject((ObjectNode) jsonNode, objectCodec, ctxt); } if (bean != null) { return bean; } else { // Jackson 2.6+ throws NPE on null typeId parameter (underlying Map changed from HashMap // to ConcurrentHashMap), so use empty string instead of null JsonDeserializer<Object> deser = _findDeserializer(ctxt, ""); JsonParser treeParser = jp.getCodec().treeAsTokens(jsonNode); treeParser.nextToken(); return deser.deserialize(treeParser, ctxt); } } catch (JsonMappingException ex) { throw Jackson.maybeImproveLocation(currentLocation, ex); } }
From source file:org.jmxtrans.embedded.output.CopperEggWriter.java
public String groupFind(String findName, String findIndex, Integer ExpectInt) throws Exception { JsonFactory f = new MappingJsonFactory(); JsonParser jp = f.createJsonParser(findIndex); int count = 0; int foundit = 0; String Result = null;/*from ww w . j ava2s . c om*/ JsonToken current = jp.nextToken(); if (current != JsonToken.START_ARRAY) { logger.warn("groupFind: Error: START_ARRAY expected, not found : quiting."); return (Result); } current = jp.nextToken(); while (current != JsonToken.END_ARRAY) { if (current != JsonToken.START_OBJECT) { logger.warn("groupFind: Error: START_OBJECT expected, not found : quiting."); return (Result); } current = jp.nextToken(); JsonNode node = jp.readValueAsTree(); String tmpStr = node.get("name").asText().toString(); if (findName.equals(node.get("name").asText().toString())) { if (ExpectInt != 0) { foundit = node.get("id").asInt(); Result = String.valueOf(foundit); } else { Result = node.get("id").asText().toString(); } break; } current = jp.nextToken(); count = count + 1; } return (Result); }
From source file:io.coala.json.DynaBean.java
/** * @param referenceType//from w w w .ja v a 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); } }; }
From source file:org.jmxtrans.embedded.output.CopperEggWriter.java
/** * read_config()//from ww w . j a v a2s .c o m * The copperegg_config.json file contains a specification for the metric groups and dashboards to be created / or updated. * Mandatory */ public void read_config(InputStream in) throws Exception { JsonFactory f = new MappingJsonFactory(); JsonParser jp = f.createJsonParser(in); JsonToken current; current = jp.nextToken(); if (current != JsonToken.START_OBJECT) { logger.warn("read_config: Error: START_OBJECT not found : quiting."); return; } current = jp.nextToken(); String fieldName = jp.getCurrentName(); current = jp.nextToken(); if (fieldName.equals("config")) { if (current != JsonToken.START_OBJECT) { logger.warn("read_config: Error: START_OBJECT not found after config : quiting."); return; } current = jp.nextToken(); String fieldName2 = jp.getCurrentName(); if (fieldName2.equals("metric_groups")) { current = jp.nextToken(); if (current != JsonToken.START_ARRAY) { logger.warn("read_config: Error: START_ARRAY not found after metric_groups : quiting."); return; } current = jp.nextToken(); while (current != JsonToken.END_ARRAY) { if (current != JsonToken.START_OBJECT) { logger.warn( "read_config: Error: START_OBJECT not found after metric_groups START_ARRAY : quiting."); return; } current = jp.nextToken(); JsonNode node1 = jp.readValueAsTree(); String node1string = write_tostring(node1); metricgroupMap.put(node1.get("name").asText(), node1string); current = jp.nextToken(); } current = jp.nextToken(); String fieldName3 = jp.getCurrentName(); if (fieldName3.equals("dashboards")) { current = jp.nextToken(); if (current != JsonToken.START_ARRAY) { logger.warn("read_config: Error: START_ARRAY not found after dashboards : quiting."); return; } current = jp.nextToken(); while (current != JsonToken.END_ARRAY) { if (current != JsonToken.START_OBJECT) { logger.warn( "read_config: Error: START_OBJECT not found after dashboards START_ARRAY : quiting."); return; } current = jp.nextToken(); JsonNode node = jp.readValueAsTree(); String nodestring = write_tostring(node); dashMap.put(node.get("name").asText(), nodestring); current = jp.nextToken(); } if (jp.nextToken() != JsonToken.END_OBJECT) { logger.warn("read_config: Error: END_OBJECT expected, not found (1): quiting."); return; } if (jp.nextToken() != JsonToken.END_OBJECT) { logger.warn("read_config: Error: END_OBJECT expected, not found (2): quiting."); return; } } else { logger.warn("read_config: Error: Expected dashboards : quiting."); return; } } else { logger.warn("read_config: Error: Expected metric_groups : quiting."); return; } } }
From source file:org.apache.syncope.core.misc.serialization.AttributeDeserializer.java
@Override public Attribute deserialize(final JsonParser jp, final DeserializationContext ctx) throws IOException { ObjectNode tree = jp.readValueAsTree(); String name = tree.get("name").asText(); List<Object> values = new ArrayList<Object>(); for (Iterator<JsonNode> itor = tree.get("value").iterator(); itor.hasNext();) { JsonNode node = itor.next();/*from w w w.ja v a2 s.c o m*/ if (node.isNull()) { values.add(null); } else if (node.isObject()) { values.add(((ObjectNode) node).traverse(jp.getCodec()).readValueAs(GuardedString.class)); } else if (node.isBoolean()) { values.add(node.asBoolean()); } else if (node.isDouble()) { values.add(node.asDouble()); } else if (node.isLong()) { values.add(node.asLong()); } else if (node.isInt()) { values.add(node.asInt()); } else { String text = node.asText(); if (text.startsWith(AttributeSerializer.BYTE_ARRAY_PREFIX) && text.endsWith(AttributeSerializer.BYTE_ARRAY_SUFFIX)) { values.add(Base64.decode(StringUtils.substringBetween(text, AttributeSerializer.BYTE_ARRAY_PREFIX, AttributeSerializer.BYTE_ARRAY_SUFFIX))); } else { values.add(text); } } } return Uid.NAME.equals(name) ? new Uid(values.isEmpty() || values.get(0) == null ? null : values.get(0).toString()) : Name.NAME.equals(name) ? new Name(values.isEmpty() || values.get(0) == null ? null : values.get(0).toString()) : AttributeBuilder.build(name, values); }