JsonPath возвращает несовместимые типы классов при использовании функции чтения против карты - PullRequest
0 голосов
/ 30 апреля 2020

Я получаю разные типы возвращаемых данных при использовании функции чтения и сопоставления при запросах примитивов. Например, при запросе строки при использовании JacksonJsonNodeJsonProvider,

  • функция чтения возвращает объект типа - com.faster xml .jackson.databind.node.TextNode
  • объект, переданный в MapFunction: - java .lang.String

пример кода -

static void test(){
        String json = "{\"store\":{\"book\":{\"color\":\"blue\",\"price\":5},\"bicycle\":{\"color\":\"red\",\"price\":19.95}}}";
        Configuration config = Configuration.builder()
                .jsonProvider(new JacksonJsonNodeJsonProvider())
                .build();
        DocumentContext document = JsonPath.using(config).parse(json);
        JsonPath path = JsonPath.compile("$.store.book.color");
        Object o = document.read(path);
        System.out.println(o);
        System.out.println(o.getClass());
        MapFunction mapFunction = (object, configuration) -> {
            System.out.println(object);
            System.out.println(object.getClass());
            return object;
        };
        document.map(path, mapFunction);
        document.map("$.store.book", mapFunction);

    }

, который возвращает

"blue"
class com.fasterxml.jackson.databind.node.TextNode
blue
class java.lang.String
{"color":"blue","price":5}
class com.fasterxml.jackson.databind.node.ObjectNode

Есть ли Speci c причина того же? Как я могу получить объект типа JsonNode при использовании функции карты также?

...