У меня есть массив JSON, который я хотел бы сопоставить, который выглядит так:
{
"library": [
{
"key":"val"
},
{
"key":"val"
}
]
}
Есть ли способ разобрать это, используя объект mapper, начиная с массива, а не из корня? Я знаю, что вы можете выполнить ручный анализ узлов, но я бы предпочел не делать этого, если это возможно. любая помощь с этим была бы весьма признательна.
Джексон предлагает три основных способа разбора 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}]
Альтернативой будет использование потокового анализатора... он может выбрать любой узел, не беспокоясь о понимании всей структуры. Я считаю, что это у Гссона. Но в вашем случае, вероятно, будет излишним использовать потоковый анализатор: имеет смысл, когда общая структура сложна, вам нужно быстро обрабатывать большой поток и интересоваться относительно небольшой частью данных. Они, похоже, не относятся к вашему сценарию.