
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