Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Если вы используете ObjectMapper
Jackson
, попробуйте использовать функцию ACCEPT_SINGLE_VALUE_AS_ARRAY
, которая позволяет рассматривать отдельные элементы как one-element-array
. Ниже вы можете найти простой пример того, как прочитать JSON
в список Pojo
классов:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.type.CollectionType;
import java.io.File;
import java.util.List;
import java.util.stream.Collectors;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
CollectionType collectionType0 = mapper.getTypeFactory().constructCollectionType(List.class, Pojo.class);
CollectionType collectionType1 = mapper.getTypeFactory().constructCollectionType(List.class, collectionType0);
List<List<Pojo>> list = mapper.readValue(jsonFile, collectionType1);
List<Pojo> pojos = list.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
System.out.println(pojos);
}
}
class Pojo {
@JsonProperty("Key1")
private String key1;
// getters, setters, toString
}
Над кодом напечатано:
[Pojo{key1='Value1'}, Pojo{key1='Value1-1'}]