Я использую библиотеку JSON Джексона и ее систему Tree Model (JsonNode
) в своем приложении Java. В этом мне нужно проверить, содержит ли ArrayNode
данный JsonNode
. Я просматривал JavaDocs и не видел никакого метода .contains()
для ArrayNode
. В итоге я сам написал методы содержащий:
public static boolean arrayNodeContains(ArrayNode arrayNode, JsonNode node) {
Stream<JsonNode> nodeStream = StreamSupport.stream(arrayNode.spliterator(), false);
return nodeStream.anyMatch(j -> j.equals(node));
}
Модульный тест:
@Test
public void testArrayNodeContains()
throws IOException
{
ObjectMapper mapper = new ObjectMapper;
String arrayJsonString = "[{\"foo\":\"bar\"},{\"foo\":\"baz\"},{\"baz\":\"bar\"}]";
String nodeTrueJsonString = "{\"foo\":\"bar\"}";
String nodeFalseJsonString = "{\"foo\":\"brains\"}";
List<Object> list = mapper.readValue(arrayJsonString, List.class);
ArrayNode arrayNode = mapper.valueToTree(list);
Map<String, Object> nodeTrueMap = mapper.readValue(nodeTrueJsonString, Map.class);
JsonNode nodeTrue = mapper.valueToTree(nodeTrueMap);
assertTrue(arrayNodeContains(arrayNode, nodeTrue));
Map<String, Object> nodeFalseMap = mapper.readValue(nodeFalseJsonString, Map.class);
JsonNode nodeFalse = mapper.valueToTree(nodeFalseMap);
assertFalse(arrayNodeContains(arrayNode, nodeFalse));
}
Я что-то упустил в Джексоне, и я дублирую какой-то библиотечный метод, который я пропустил. Иначе, есть ли лучший способ сделать это, чем я?