com.fasterxml.jackson.databind.node.ValueNode Java Examples

The following examples show how to use com.fasterxml.jackson.databind.node.ValueNode. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: JsonUtils.java    From kogito-runtimes with Apache License 2.0 6 votes vote down vote up
private static void updateObject(JsonNode target,
                                 ValueNode value,
                                 Map.Entry<String, JsonNode> src) {
    boolean newEntry = true;
    Iterator<Map.Entry<String, JsonNode>> iter = target.fields();
    while (iter.hasNext()) {
        Map.Entry<String, JsonNode> entry = iter.next();
        if (entry.getKey().equals(src.getKey())) {
            newEntry = false;
            entry.setValue(value);
        }
    }
    if (newEntry) {
        ((ObjectNode) target).replace(src.getKey(), src.getValue());
    }
}
 
Example #2
Source File: InstanceResultUtils.java    From choerodon-starters with Apache License 2.0 6 votes vote down vote up
public static String resultToJson(final Object result, final ObjectMapper objectMapper) throws IOException {
    if (result == null) {
        return null;
    }
    if (result instanceof String) {
        String resultStr = (String) result;
        if (resultStr.isEmpty()) {
            return null;
        }
        JsonNode jsonNode = objectMapper.readTree(resultStr);
        if (!(jsonNode instanceof ValueNode)) {
            return resultStr;
        }
    }
    return objectMapper.writeValueAsString(result);
}
 
Example #3
Source File: Configurations.java    From monasca-common with Apache License 2.0 6 votes vote down vote up
private static void buildConfigFor(String path, Map<String, String> config, JsonNode node) {
  for (Iterator<Map.Entry<String, JsonNode>> i = node.fields(); i.hasNext();) {
    Map.Entry<String, JsonNode> field = i.next();
    if (field.getValue() instanceof ValueNode) {
      ValueNode valueNode = (ValueNode) field.getValue();
      config.put(DOT_JOINER.join(path, field.getKey()), valueNode.asText());
    } else if (field.getValue() instanceof ArrayNode) {
      StringBuilder combinedValue = new StringBuilder();
      ArrayNode arrayNode = (ArrayNode) field.getValue();
      for (Iterator<JsonNode> it = arrayNode.elements(); it.hasNext();) {
        String value = it.next().asText().replaceAll("^\"|\"$", "");
        if (combinedValue.length() > 0)
          combinedValue.append(',');
        combinedValue.append(value);
      }

      config.put(DOT_JOINER.join(path, field.getKey()), combinedValue.toString());
    }

    buildConfigFor(DOT_JOINER.join(path, field.getKey()), config, field.getValue());
  }
}
 
Example #4
Source File: PlaceholderResolver.java    From styx with Apache License 2.0 6 votes vote down vote up
@Override
public void onValueNode(ValueNode node, Optional<ContainerNode<?>> parent, List<PathElement> path) {
    String value = node.isTextual() ? node.textValue() : node.toString();

    List<Placeholder> placeholders = extractPlaceholders(value);

    if (!placeholders.isEmpty()) {
        for (Placeholder placeholder : placeholders) {
            if (placeholder.hasDefaultValue()) {
                String valueWithReplacements = replacePlaceholder(value, placeholder.name(), placeholder.defaultValue());

                last(path).setChild(parent.get(), TextNode.valueOf(valueWithReplacements));

                if (LOGGER.isDebugEnabled()) {
                    LOGGER.debug("At {}, replaced {} with {}", new Object[]{path, value, valueWithReplacements});
                }
            }
        }
    }
}
 
Example #5
Source File: AbstractBuilder.java    From simple-json-rpc with MIT License 6 votes vote down vote up
/**
 * Creates a new JSON-RPC request as a JSON object
 *
 * @param id     request id
 * @param method request method
 * @param params request params
 * @return a new request as a JSON object
 */
@NotNull
protected ObjectNode request(@NotNull ValueNode id, @NotNull String method,
                             @NotNull JsonNode params) {
    if (method.isEmpty()) {
        throw new IllegalArgumentException("Method is not set");
    }
    ObjectNode requestNode = mapper.createObjectNode();
    requestNode.put(JSONRPC, VERSION_2_0);
    requestNode.put(METHOD, method);
    requestNode.set(PARAMS, params);
    if (!id.isNull()) {
        requestNode.set(ID, id);
    }
    return requestNode;
}
 
Example #6
Source File: EventCsvDownload.java    From konker-platform with Apache License 2.0 6 votes vote down vote up
public void jsonToMap(String currentPath, JsonNode jsonNode, Map<String, String> map) {
	if (jsonNode.isObject()) {
		ObjectNode objectNode = (ObjectNode) jsonNode;
		Iterator<Entry<String, JsonNode>> iter = objectNode.fields();
		String pathPrefix = currentPath.isEmpty() ? "" : currentPath + ".";
		
		while (iter.hasNext()) {
			Entry<String, JsonNode> entry = iter.next();
			jsonToMap(pathPrefix + entry.getKey(), entry.getValue(), map);
		}
	} else if (jsonNode.isArray()) {
		ArrayNode arrayNode = (ArrayNode) jsonNode;
		for (int i = 0; i < arrayNode.size(); i++) {
			jsonToMap(currentPath + "." + i, arrayNode.get(i), map);
		}
	} else if (jsonNode.isValueNode()) {
		ValueNode valueNode = (ValueNode) jsonNode;
		map.put(currentPath, valueNode.asText());
	}
}
 
Example #7
Source File: JsonFlattenConverter.java    From cloud-config with MIT License 6 votes vote down vote up
private void addKeys(String currentPath, JsonNode jsonNode, Map<Object, Object> props) {
    if (jsonNode.isObject()) {
        ObjectNode objectNode = (ObjectNode) jsonNode;
        Iterator<Map.Entry<String, JsonNode>> iter = objectNode.fields();
        String pathPrefix = currentPath.isEmpty() ? "" : currentPath + ".";

        while (iter.hasNext()) {
            Map.Entry<String, JsonNode> entry = iter.next();
            addKeys(pathPrefix + entry.getKey(), entry.getValue(), props);
        }
    } else if (jsonNode.isArray()) {
        ArrayNode arrayNode = (ArrayNode) jsonNode;
        for (int i = 0; i < arrayNode.size(); i++) {
            addKeys(currentPath + "[" + i + "]", arrayNode.get(i), props);
        }
    } else if (jsonNode.isValueNode()) {
        ValueNode valueNode = (ValueNode) jsonNode;
        if(isAllowOverride || !props.containsKey(currentPath))
            props.put(currentPath, valueNode.asText());
    }
}
 
Example #8
Source File: CouchDbICureRepositorySupport.java    From icure-backend with GNU General Public License v2.0 5 votes vote down vote up
private <P> PaginatedList<T> pagedQueryView(String viewName, P startKey, P endKey, PaginationOffset<P> pagination, boolean descending, Function<P, ValueNode> startToNode) {
	int limit = pagination.getLimit() != null ? pagination.getLimit() : DEFAULT_LIMIT;
	int page = pagination.getPage() != null ? pagination.getPage() : 0;
	String startDocId = pagination.getStartDocumentId();

	ViewQuery viewQuery = createQuery(viewName)
			.startKey(startKey)
			.includeDocs(true)
			.startDocId(startDocId)
			.limit(limit)
			.descending(descending);

	if (endKey != null) {
		viewQuery = viewQuery.endKey(endKey);
	}

	PageRequest.Builder builder = new PageRequest.Builder().pageSize(limit).page(page);

	if (startKey !=null || startDocId != null) {
		builder.nextKey(new PageRequest.KeyIdPair(pagination.getStartKey() == null ? null : startToNode.apply(pagination.getStartKey()), startDocId)).page(Math.max(page,1));
	}

	PageRequest pr = builder.build();
	Page<T> ts = db.queryForPage(viewQuery, pr, type);

	Object sk = ts.getTotalSize() > ts.getPageSize() && ts.getNextPageRequest() != null ? ts.getNextPageRequest().getStartKey() : null;
	return new PaginatedList<>(
			ts.getPageSize(),
			ts.getTotalSize(),
			ts.getRows(),
			sk != null ?
					new PaginatedDocumentKeyIdPair((sk instanceof  NullNode) ? null : (sk instanceof LongNode) ? Collections.singletonList(""+((LongNode) sk).longValue()) : Collections.singletonList(((TextNode) sk).textValue()), ts.getNextPageRequest().getStartKeyDocId())
					: null
	);
}
 
Example #9
Source File: Request.java    From simple-json-rpc with MIT License 5 votes vote down vote up
public Request(@JsonProperty("jsonrpc") @Nullable String jsonrpc,
               @JsonProperty("method") @Nullable String method,
               @JsonProperty("params") @NotNull JsonNode params,
               @JsonProperty("id") @NotNull ValueNode id) {
    this.jsonrpc = jsonrpc;
    this.method = method;
    this.id = id;
    this.params = params;
}
 
Example #10
Source File: Issue.java    From gitlab4j-api with MIT License 5 votes vote down vote up
public void setActualId(ValueNode id) {
actualId = id;
       if (actualId instanceof TextNode) {
           externalId = actualId.asText();
       } else if (actualId instanceof IntNode) {
           this.id = actualId.asInt();
       }
   }
 
Example #11
Source File: CustomAttributeDeserializer.java    From intercom-java with Apache License 2.0 5 votes vote down vote up
@Override
public CustomAttribute deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
    CustomAttribute cda = null;
    final String currentName = jp.getParsingContext().getCurrentName();
    final ObjectMapper mapper = (ObjectMapper) jp.getCodec();
    final ValueNode vNode = mapper.readTree(jp);
    if (vNode.asToken().isScalarValue()) {
        if (vNode.getNodeType() == JsonNodeType.BOOLEAN) {
            cda = new CustomAttribute<Boolean>(currentName, vNode.asBoolean(), Boolean.class);
        } else if (vNode.getNodeType() == JsonNodeType.STRING) {
            cda = new CustomAttribute<String>(currentName, vNode.asText(), String.class);
        } else if (vNode.getNodeType() == JsonNodeType.NUMBER) {
            final NumericNode nNode = (NumericNode) vNode;
            if (currentName.endsWith("_at")) {
                cda = new CustomAttribute<Long>(currentName, vNode.longValue(), Long.class);
            } else if (nNode.isInt()) {
                cda = new CustomAttribute<Integer>(currentName, vNode.intValue(), Integer.class);
            } else if (nNode.isFloat()) {
                cda = new CustomAttribute<Float>(currentName, vNode.floatValue(), Float.class);
            } else if (nNode.isDouble()) {
                cda = new CustomAttribute<Double>(currentName, vNode.doubleValue(), Double.class);
            } else if (nNode.isLong()) {
                cda = new CustomAttribute<Long>(currentName, vNode.longValue(), Long.class);
            } else {
                cda = new CustomAttribute<String>(currentName, vNode.asText(), String.class);
            }
        } else {
            cda = new CustomAttribute<String>(currentName, vNode.asText(), String.class);
        }
    }
    return cda;
}
 
Example #12
Source File: JsonBlockSerializer.java    From succinct with Apache License 2.0 5 votes vote down vote up
private void flattenJsonTree(String currentPath, JsonNode jsonNode, ByteArrayOutputStream out)
  throws SerializationException {
  if (jsonNode.isObject()) {
    ObjectNode objectNode = (ObjectNode) jsonNode;
    Iterator<Map.Entry<String, JsonNode>> iter = objectNode.fields();
    String pathPrefix = currentPath.isEmpty() ? "" : currentPath + ".";
    while (iter.hasNext()) {
      Map.Entry<String, JsonNode> entry = iter.next();
      flattenJsonTree(pathPrefix + entry.getKey(), entry.getValue(), out);
    }
  } else if (jsonNode.isArray()) {
    throw new SerializationException("Arrays in JSON are not supported yet.");
  } else if (jsonNode.isValueNode()) {
    ValueNode valueNode = (ValueNode) jsonNode;
    if (!fieldMapping.containsField(currentPath)) {
      fieldMapping.put(currentPath, delimiters[currentDelimiterIdx++], getNodeType(jsonNode));
    } else {
      DataType existingType = fieldMapping.getDataType(currentPath);
      DataType newType = getNodeType(valueNode);
      if (existingType != newType) {
        DataType encapsulatingType = DataType.encapsulatingType(existingType, newType);
        fieldMapping.updateType(currentPath, encapsulatingType);
      }
    }
    try {
      byte fieldByte = fieldMapping.getDelimiter(currentPath);
      out.write(fieldByte);
      out.write(valueNode.asText().getBytes());
      out.write(fieldByte);
    } catch (IOException e) {
      throw new SerializationException(e.getMessage());
    }
  }
}
 
Example #13
Source File: DurationSerialization.java    From heroic with Apache License 2.0 5 votes vote down vote up
private Duration deserializeObject(TreeNode tree, DeserializationContext c)
    throws JsonMappingException {
    if (tree == null) {
        throw c.mappingException("expected object");
    }

    TreeNode node;
    ValueNode valueNode;

    final long duration;
    final TimeUnit unit;

    if ((node = tree.get("duration")) != null && node.isValueNode() &&
        (valueNode = (ValueNode) node).isNumber()) {
        duration = valueNode.asLong();
    } else {
        throw c.mappingException("duration is not a numeric field");
    }

    if ((node = tree.get("unit")) != null && node.isValueNode() &&
        (valueNode = (ValueNode) node).isTextual()) {
        unit = TimeUnit.valueOf(valueNode.asText().toUpperCase());
    } else {
        unit = Duration.DEFAULT_UNIT;
    }

    return new Duration(duration, unit);
}
 
Example #14
Source File: JSONUtils.java    From Knowage-Server with GNU Affero General Public License v3.0 5 votes vote down vote up
public static Object getValueFromJsonNode(JsonNode node) throws JSONException {

		Object value = null;
		if (node instanceof TextNode) {
			value = ((TextNode) (node)).textValue();
		} else if (node instanceof ObjectNode) {
			value = toJSONObject((ObjectNode) node);
		} else if (node instanceof ArrayNode) {
			value = toJSONArray((ArrayNode) node);
		} else if (node instanceof ValueNode) {
			value = ((ValueNode) node).asText();
		}
		return value;
	}
 
Example #15
Source File: PlaceholderResolver.java    From styx with Apache License 2.0 5 votes vote down vote up
@Override
public void onValueNode(ValueNode node, Optional<ContainerNode<?>> parent, List<PathElement> pathAsList) {
    String path = new NodePath(pathAsList).toString();

    String value = node.isTextual() ? node.textValue() : node.toString();

    List<Placeholder> placeholders = extractPlaceholders(value);

    if (placeholders.isEmpty() && !resolved.containsKey(path)) {
        resolved.put(path, value);
        passAgain = true;
    } else {
        boolean changes = false;

        for (Placeholder placeholder : placeholders) {
            String replacement = resolved.get(placeholder.name());

            if (replacement != null) {
                String valueWithReplacements = replacePlaceholder(value, placeholder.name(), replacement);

                last(pathAsList).setChild(parent.get(), TextNode.valueOf(valueWithReplacements));

                if (LOGGER.isDebugEnabled()) {
                    LOGGER.debug("At {}, replaced {} with {}", new Object[]{pathAsList, value, valueWithReplacements});
                }

                value = valueWithReplacements;
                changes = true;
            }
        }
        passAgain |= changes;
    }
}
 
Example #16
Source File: PlaceholderResolver.java    From styx with Apache License 2.0 5 votes vote down vote up
@Override
public void onValueNode(ValueNode node, Optional<ContainerNode<?>> parent, List<PathElement> path) {
    String value = node.isTextual() ? node.textValue() : node.toString();

    List<String> placeholders = extractPlaceholderStrings(value);

    if (!placeholders.isEmpty()) {
        String pathString = new NodePath(path).toString();

        for (String placeholder : placeholders) {
            unresolvedPlaceholderDescriptions.add(new UnresolvedPlaceholder(pathString, value, placeholder));
        }
    }
}
 
Example #17
Source File: JsonUtils.java    From json-data-generator with Apache License 2.0 5 votes vote down vote up
public void flattenJsonIntoMap(String currentPath, JsonNode jsonNode, Map<String, Object> map) {
    if (jsonNode.isObject()) {
        ObjectNode objectNode = (ObjectNode) jsonNode;
        Iterator<Map.Entry<String, JsonNode>> iter = objectNode.fields();
        String pathPrefix = currentPath.isEmpty() ? "" : currentPath + ".";

        while (iter.hasNext()) {
            Map.Entry<String, JsonNode> entry = iter.next();
            flattenJsonIntoMap(pathPrefix + entry.getKey(), entry.getValue(), map);
        }
    } else if (jsonNode.isArray()) {
        ArrayNode arrayNode = (ArrayNode) jsonNode;
        for (int i = 0; i < arrayNode.size(); i++) {
            flattenJsonIntoMap(currentPath + "[" + i + "]", arrayNode.get(i), map);
        }
    } else if (jsonNode.isValueNode()) {
        ValueNode valueNode = (ValueNode) jsonNode;
        Object value = null;
        if (valueNode.isNumber()) {
           value = valueNode.numberValue();
        } else if (valueNode.isBoolean()) {
            value = valueNode.asBoolean();
        } else if (valueNode.isTextual()){
            value = valueNode.asText();
        }
        map.put(currentPath, value);
    }
}
 
Example #18
Source File: SuccessResponse.java    From simple-json-rpc with MIT License 4 votes vote down vote up
public SuccessResponse(@JsonProperty("id") @NotNull ValueNode id,
                       @JsonProperty("result") @Nullable Object result) {
    super(id);
    this.result = result;
}
 
Example #19
Source File: DistributedWorkplaceStore.java    From onos with Apache License 2.0 4 votes vote down vote up
@Activate
public void activate() {

    appId = coreService.registerApplication("org.onosproject.workplacestore");
    log.info("appId=" + appId);

    KryoNamespace workplaceNamespace = KryoNamespace.newBuilder()
            .register(KryoNamespaces.API)
            .register(WorkflowData.class)
            .register(Workplace.class)
            .register(DefaultWorkplace.class)
            .register(WorkflowContext.class)
            .register(DefaultWorkflowContext.class)
            .register(SystemWorkflowContext.class)
            .register(WorkflowState.class)
            .register(ProgramCounter.class)
            .register(DataModelTree.class)
            .register(JsonDataModelTree.class)
            .register(List.class)
            .register(ArrayList.class)
            .register(JsonNode.class)
            .register(ObjectNode.class)
            .register(TextNode.class)
            .register(LinkedHashMap.class)
            .register(ArrayNode.class)
            .register(BaseJsonNode.class)
            .register(BigIntegerNode.class)
            .register(BinaryNode.class)
            .register(BooleanNode.class)
            .register(ContainerNode.class)
            .register(DecimalNode.class)
            .register(DoubleNode.class)
            .register(FloatNode.class)
            .register(IntNode.class)
            .register(JsonNodeType.class)
            .register(LongNode.class)
            .register(MissingNode.class)
            .register(NullNode.class)
            .register(NumericNode.class)
            .register(POJONode.class)
            .register(ShortNode.class)
            .register(ValueNode.class)
            .register(JsonNodeCreator.class)
            .register(JsonNodeFactory.class)
            .build();

    localWorkplaceMap.clear();
    workplaceMap = storageService.<String, WorkflowData>consistentMapBuilder()
            .withSerializer(Serializer.using(workplaceNamespace))
            .withName("workplace-map")
            .withApplicationId(appId)
            .build();
    workplaceMap.addListener(workplaceMapEventListener);

    localContextMap.clear();
    contextMap = storageService.<String, WorkflowData>consistentMapBuilder()
            .withSerializer(Serializer.using(workplaceNamespace))
            .withName("workflow-context-map")
            .withApplicationId(appId)
            .build();
    contextMap.addListener(contextMapEventListener);

    workplaceMapEventListener.syncLocal();
    contextMapEventListener.syncLocal();
    log.info("Started");
}
 
Example #20
Source File: Request.java    From simple-json-rpc with MIT License 4 votes vote down vote up
@NotNull
public ValueNode getId() {
    return id;
}
 
Example #21
Source File: ErrorResponse.java    From simple-json-rpc with MIT License 4 votes vote down vote up
@JsonCreator
public ErrorResponse(@JsonProperty("id") @NotNull ValueNode id,
                     @JsonProperty("error") @NotNull ErrorMessage error) {
    super(id);
    this.error = error;
}
 
Example #22
Source File: Response.java    From simple-json-rpc with MIT License 4 votes vote down vote up
@NotNull
public ValueNode getId() {
    return id;
}
 
Example #23
Source File: Response.java    From simple-json-rpc with MIT License 4 votes vote down vote up
public Response(@NotNull ValueNode id, @NotNull String jsonrpc) {
    this.id = id;
    this.jsonrpc = jsonrpc;
}
 
Example #24
Source File: Response.java    From simple-json-rpc with MIT License 4 votes vote down vote up
public Response(@NotNull ValueNode id) {
    this.id = id;
    jsonrpc = VERSION;
}
 
Example #25
Source File: JsonRpcServer.java    From simple-json-rpc with MIT License 4 votes vote down vote up
/**
 * Performs single JSON-RPC request and return JSON-RPC response
 *
 * @param request JSON-RPC request as a Java object
 * @param service service object
 * @return JSON-RPC response as a Java object
 * @throws Exception in case of a runtime error (reflections, business logic...)
 */
@NotNull
private Response handleSingle(@NotNull Request request, @NotNull Object service) throws Exception {
    // Check mandatory fields and correct protocol version
    String requestMethod = request.getMethod();
    String jsonrpc = request.getJsonrpc();
    ValueNode id = request.getId();
    if (jsonrpc == null || requestMethod == null) {
        log.error("Not a JSON-RPC request: " + request);
        return new ErrorResponse(id, INVALID_REQUEST);
    }

    if (!jsonrpc.equals(VERSION)) {
        log.error("Not a JSON_RPC 2.0 request: " + request);
        return new ErrorResponse(id, INVALID_REQUEST);
    }

    JsonNode params = request.getParams();
    if (!params.isObject() && !params.isArray() && !params.isNull()) {
        log.error("Params of request: '" + request + "' should be an object, an array or null");
        return new ErrorResponse(id, INVALID_REQUEST);
    }

    ClassMetadata classMetadata = classesMetadata.get(service.getClass());
    if (!classMetadata.isService()) {
        log.warn(service.getClass() + " is not available as a JSON-RPC 2.0 service");
        return new ErrorResponse(id, METHOD_NOT_FOUND);
    }

    MethodMetadata method = classMetadata.getMethods().get(requestMethod);
    if (method == null) {
        log.error("Unable find a method: '" + requestMethod + "' in a " + service.getClass());
        return new ErrorResponse(id, METHOD_NOT_FOUND);
    }

    ContainerNode<?> notNullParams = !params.isNull() ?
            (ContainerNode<?>) params : mapper.createObjectNode();
    Object[] methodParams;
    try {
        methodParams = convertToMethodParams(notNullParams, method);
    } catch (IllegalArgumentException e) {
        log.error("Bad params: " + notNullParams + " of a method '" + method.getName() + "'", e);
        return new ErrorResponse(id, INVALID_PARAMS);
    }

    Object result = method.getMethod().invoke(service, methodParams);
    return new SuccessResponse(id, result);
}
 
Example #26
Source File: JsonTreeTraversalTest.java    From styx with Apache License 2.0 4 votes vote down vote up
private Call(ValueNode node, Optional<ContainerNode<?>> parent, List<PathElement> path) {
    this.node = node;
    this.parent = parent;
    this.path = path;
}
 
Example #27
Source File: Issue.java    From gitlab4j-api with MIT License 4 votes vote down vote up
public ValueNode getActualId() {
    return actualId;
}
 
Example #28
Source File: TopicDeserializer.java    From intercom-java with Apache License 2.0 4 votes vote down vote up
@Override
public Subscription.Topic deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
    final ObjectMapper mapper = (ObjectMapper) jp.getCodec();
    final ValueNode vNode = mapper.readTree(jp);
    return Subscription.Topic.valueOf(vNode.asText());
}
 
Example #29
Source File: JsonParsingServiceImpl.java    From konker-platform with Apache License 2.0 4 votes vote down vote up
private void addKeys(String currentPath, JsonNode jsonNode, Map<String, JsonPathData> map, List<JsonNodeType> knownTypes) {
    if (jsonNode.isObject()) {
        ObjectNode objectNode = (ObjectNode) jsonNode;
        Iterator<Map.Entry<String, JsonNode>> iterator = objectNode.fields();
        String pathPrefix = currentPath.isEmpty() ? "" : currentPath + ".";

        if (knownTypes == null)
            knownTypes = new ArrayList<>();

        knownTypes.add(JsonNodeType.OBJECT);

        while (iterator.hasNext()) {
            Map.Entry<String, JsonNode> entry = iterator.next();
            addKeys(pathPrefix + entry.getKey(), entry.getValue(), map, new ArrayList<>(knownTypes));
        }
    } else if (jsonNode.isArray()) {
        ArrayNode arrayNode = (ArrayNode) jsonNode;

        if (currentPath.isEmpty())
            currentPath = "root";

        if (knownTypes == null)
            knownTypes = new ArrayList<>();

        knownTypes.add(JsonNodeType.ARRAY);

        for (int i = 0; i < arrayNode.size(); i++) {
            addKeys(currentPath + "." + i, arrayNode.get(i), map, new ArrayList<>(knownTypes));
        }
    } else if (jsonNode.isValueNode()) {
        ValueNode valueNode = (ValueNode) jsonNode;
        if (knownTypes == null)
            knownTypes = new ArrayList<>();
        knownTypes.add(valueNode.getNodeType());
        JsonPathData.JsonPathDataBuilder data = JsonPathData.builder().types(knownTypes);
        switch (valueNode.getNodeType()) {
            case NUMBER: {
                if (valueNode.asText().contains("."))
                    map.put(currentPath, data.value(valueNode.asDouble()).build());
                else
                    map.put(currentPath, data.value(valueNode.asLong()).build());
                break;
            }
            case BOOLEAN: {
                map.put(currentPath, data.value(valueNode.asBoolean()).build());
                break;
            }
            default: {
                map.put(currentPath, data.value(valueNode.asText()).build());
                break;
            }
        }
    }
}
 
Example #30
Source File: JsonTreeTraversal.java    From styx with Apache License 2.0 votes vote down vote up
void onValueNode(ValueNode node, Optional<ContainerNode<?>> parent, List<PathElement> path);