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

fi.evolver.basics.spring.util.JsonParseUtils Maven / Gradle / Ivy

package fi.evolver.basics.spring.util;

import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import fi.evolver.utils.spliterator.MatcherSpliterator;


public class JsonParseUtils {
	private static final Pattern ELEMENT_NAME_REGEX = Pattern.compile("[a-zA-Z][a-zA-Z_0-9\\-]*");

	private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

	private JsonParseUtils() {}


	/**
	 * Returns a stream of text element values from anywhere within the given JSON document.
	 *
	 * @param json JSON document to search from.
	 * @param element Element name to search for.
	 * @return Stream of element values.
	 */
	public static Stream parseTextElements(String json, String element) {
		if (!ELEMENT_NAME_REGEX.matcher(element).matches())
			throw new IllegalArgumentException("Invalid element name: " + element);

		Pattern regex = Pattern.compile(createElementRegex(element) + "(\"(?:(? parseFirstTextElement(String json, String element) {
		return parseTextElements(json, element)
				.findFirst()
				.filter(s -> !s.isBlank());
	}


	private static String createElementRegex(String element) {
		return String.format("\"%s\"\\s*:\\s*", element);
	}


	private static String unescape(String value) {
		try {
			return OBJECT_MAPPER.readValue(value, String.class);
		}
		catch (RuntimeException | JsonProcessingException e) {
			return value;
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy