Как запустить Jackson JSON ObjetMapper с определенного ключа?

1

У меня есть массив JSON, который я хотел бы сопоставить, который выглядит так:

{
    "library": [
        {
          "key":"val"
        },
        {
          "key":"val"
        }
    ]
}

Есть ли способ разобрать это, используя объект mapper, начиная с массива, а не из корня? Я знаю, что вы можете выполнить ручный анализ узлов, но я бы предпочел не делать этого, если это возможно. любая помощь с этим была бы весьма признательна.

Теги:
jackson

1 ответ

2
Лучший ответ

Джексон предлагает три основных способа разбора json: к карте, к объекту, к дереву узлов джексона. Ни один из этих методов не предлагает способ начать из любого другого места, кроме корня. Чтобы начать с чего-то другого, кроме корня, вам нужно проанализировать свой путь туда от корня, а это значит, что вам нужно начать синтаксический анализ из корня! :)

При этом, если, например, вы используете сопоставление с объектом, очень легко получить требуемый массив из объекта:

package test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;

import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class Test {

    static String json = "{\"library\": [{\"key\":\"val\"},{\"key\":\"val\"}]}";

    static class JsonClass {
        private ArrayList<Map<?,?>> library;

        public ArrayList<Map<?, ?>> getLibrary() {
            return library;
        }

        public void setLibrary(ArrayList<Map<?, ?>> library) {
            this.library = library;
        }
    }

    public static void main(String[] args) 
            throws JsonParseException, JsonMappingException, IOException {

        JsonClass parsed = new ObjectMapper().readValue(json, Test.JsonClass.class);
        System.out.println(parsed.getLibrary());

    }

}

Выполнение этих отпечатков:

[{key=val}, {key=val}]

Альтернативой будет использование потокового анализатора... он может выбрать любой узел, не беспокоясь о понимании всей структуры. Я считаю, что это у Гссона. Но в вашем случае, вероятно, будет излишним использовать потоковый анализатор: имеет смысл, когда общая структура сложна, вам нужно быстро обрабатывать большой поток и интересоваться относительно небольшой частью данных. Они, похоже, не относятся к вашему сценарию.

  • 0
    Спасибо за ваш ответ. это очень помогло.
  • 0
    пожалуйста!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню