Почему я не могу десериализовать массив объектов, развернув корневой узел?Почему я не могу развернуть корневой узел и десериализовать массив объектов?
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonRootName;
import org.junit.Assert;
import org.junit.Test;
public class RootNodeTest extends Assert {
@JsonRootName("customers")
public static class Customer {
public String email;
}
@Test
public void testUnwrapping() throws IOException {
String json = "{\"customers\":[{\"email\":\"[email protected]\"},{\"email\":\"[email protected]\"}]}";
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
List<Customer> customers = Arrays.asList(mapper.readValue(json, Customer[].class));
System.out.println(customers);
}
}
Я копаться в документации Джексона, и это то, что я мог понять, но после запуска, я получаю следующее сообщение об ошибке:
A org.codehaus.jackson.map.JsonMappingException has been caught, Root name 'customers' does not match expected ('Customer[]') for type [array type, component type: [simple type, class tests.RootNodeTest$Customer]] at [Source: [email protected]; line: 1, column: 2]
Я хотел бы сделать это без создания класс оболочки. Хотя это пример, я не хочу создавать ненужные классы-оболочки только для развертывания корневого узла.
удалите скобки массива из второго параметра при попытке прочитатьValue и поместите их в переменную электронной почты. Преобразователь преобразует значение json String в объект типа Customer и затем сопоставляет эти письма в массив. –
@ArthurEirich Я не мог совсем последовать. Не могли бы вы привести пример? –
см. Мой ответ, я понял это –