Разбор файла.json (Java). пытаясь получить элемент из файла, результат равен нулю
Нужна помощь с Java+ JSON. Мой вопрос о файле.json. При разборе файла я получаю нулевое значение. Может быть проблема в самом файле, или я использую неправильный путь разбора. У меня есть класс PhotocameraDTO:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonIgnoreProperties(ignoreUnknown = true)
public class PhotocameraDTO {
@JsonProperty("id")
private int id;
@JsonProperty("name")
private String name;
@JsonProperty("type")
private String type;
@JsonProperty("sensor")
private String sensor;
@JsonProperty("lenses")
private String lenses;
@JsonProperty("display")
private String display;
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getType() {
return type;
}
public String getSensor() {
return sensor;
}
public String getLenses() {
return lenses;
}
public String getDisplay() {
return display;
}
@Override
public String toString() {
return ("PhotocameraDTO [id=" + id + ", name=" + name + ", type=" + type + ", sensor=" + sensor + ", lenses="
+ lenses + ", display=" + display + "]");
}
И файл.json (сделал скриншот, так как код не загружается как действительный): http://prntscr.com/ls3fgn
И мой класс с основным:
package task2;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
public class PhotocamerasTypes {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
FileInputStream fis = new FileInputStream("src/main/resources/photocameras.json");
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
TypeFactory typeFactory = TypeFactory.defaultInstance();
List<PhotocameraDTO> photocameras = objectMapper.readValue(fis, typeFactory.constructCollectionType(ArrayList.class, PhotocameraDTO.class));
System.out.println(photocameras);
}
}
Результат: [PhotocameraDTO [id=0, имя = ноль, тип = ноль, датчик = ноль, линзы = ноль, отображение = ноль]]
И теперь я нашел ошибку, но я не знаю, как ее исправить. Мой json-файл имеет такую структуру: { [{....},{.....}] } Мой код работает, если json-файл имеет следующую структуру: [{....},{.....}]
Но я не знаю, как исправить свой код для структуры с "{" в начале файла.
1 ответ
Вы можете добавить класс:
public class ItemsDTO<T> {
@JsonProperty("items")
private List<T> items;
public List<T> getItems() {
return items;
}
public void setItems(List<T> items) {
this.items = items;
}
}
затем измените основной метод:
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
FileInputStream fis = new FileInputStream("src/main/resources/photocameras.json");
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
ItemsDTO<PhotocameraDTO> itemsDto = objectMapper.readValue(fis, new TypeReference<ItemsDTO<PhotocameraDTO>>() {});
List<PhotocameraDTO> photocameras = itemsDto.getItems();
System.out.println(photocameras);
}