All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sap.cds.impl.parser.JsonParser Maven / Gradle / Ivy

There is a newer version: 3.8.0
Show newest version
package com.sap.cds.impl.parser;

import static com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_SINGLE_QUOTES;
import static com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES;

import java.io.IOException;
import java.io.Reader;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.sap.cds.CdsDataStoreException;
import com.sap.cds.ql.CdsDataException;
import com.sap.cds.ql.cqn.CqnSyntaxException;

/**
 * Utility class for JSON deserialization
 */
public class JsonParser {

	private JsonParser() {
		// empty
	}

	private static final ObjectMapper mapper = new ObjectMapper()
			.enable(ALLOW_UNQUOTED_FIELD_NAMES)
			.enable(ALLOW_SINGLE_QUOTES)
			.configure(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS, true);

	static final TypeReference>> LIST_OF_MAPS = new TypeReference>>() {
	};
	static final TypeReference> MAP = new TypeReference>() {
	};

	public static Map map(JsonNode node) {
		return mapper.convertValue(node, MAP);
	}

	public static List> list(ArrayNode array) {
		return mapper.convertValue(array, LIST_OF_MAPS);
	}

	public static Object object(JsonNode node) {
		return mapper.convertValue(node, TypeFactory.unknownType());
	}

	@SuppressWarnings("unchecked")
	public static  T parseJson(String json) {
		try {
			return (T) mapper.readTree(json);
		} catch (JsonProcessingException e) {
			throw new CqnSyntaxException("Invalid JSON: " + json, e);
		}
	}

	public static Object map(Reader reader) {
		try {
			return mapper.readValue(reader, MAP);
		} catch (JsonProcessingException e) {
			throw new CdsDataException("failed to deserialize J object", e);
		} catch (IOException e) {
			throw new CdsDataStoreException("failed to read input stream", e);
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy