使用 fasterxml 从 JSON 创建 Java 对象时出现异常
Exception while creating Java object from JSON using fasterxml
我正在尝试使用具有以下 JSON
的 fasterxml 构建一个 Java 对象
JSON : {"name":"Location Test",
"location":{
"coordinates":[10.1234657,10.123467]
},
...
}
我遇到了这个异常:
play.api.Application$$anon: Execution exception[[RuntimeException: com.fasterxml.jackson.databind.JsonMappingException:
Can not deserialize instance of double[] out of START_OBJECT token
at [Source: N/A; line: -1, column: -1] (through reference chain: com.mypackages.models.Place["location"])]]
地点Class:
public class Place{
private String name;
private Location location;
...
getters and setters
}
位置Class:
public class Location{
private double[] coordinates;
public Location(double[] coordinates) {
this.coordinates = coordinates;
}
...
//getter and setter for coordinate field
}
谁能告诉我是什么导致了这个问题?
您需要从位置对象中删除构造函数。我已经根据您提供的信息创建了示例程序并且它成功了运行。
位置Class:
public class Location{
private double[] coordinates;
/**
* @return the coordinates
*/
public double[] getCoordinates() {
return coordinates;
}
/**
* @param coordinates the coordinates to set
*/
public void setCoordinates(double[] coordinates) {
this.coordinates = coordinates;
}
}
地点Class:
public class Place{
private String name;
private Location location;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the location
*/
public Location getLocation() {
return location;
}
/**
* @param location the location to set
*/
public void setLocation(Location location) {
this.location = location;
}
@Override
public String toString() {
return "Place: " + name + " Location: " + Arrays.toString(location.getCoordinates());
}
}
APP Class:
public class 应用程序
{
public static void main(String[] args) 抛出 IOException {
//read json file data to String
byte[] jsonData = Files.readAllBytes(Paths.get("places.txt"));
//create ObjectMapper instance
ObjectMapper objectMapper = new ObjectMapper();
Place place = objectMapper.readValue(jsonData, Place.class);
System.out.println("Place Object\n"+ place);
}
}
Places.txt - 包含JSON
{
"name":"Location Test",
"location":{
"coordinates":[10.1234657,10.123467]
}
}
您需要在 maven 项目中包含以下依赖项:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.1</version>
</dependency>
我正在尝试使用具有以下 JSON
的 fasterxml 构建一个 Java 对象 JSON : {"name":"Location Test",
"location":{
"coordinates":[10.1234657,10.123467]
},
...
}
我遇到了这个异常:
play.api.Application$$anon: Execution exception[[RuntimeException: com.fasterxml.jackson.databind.JsonMappingException:
Can not deserialize instance of double[] out of START_OBJECT token
at [Source: N/A; line: -1, column: -1] (through reference chain: com.mypackages.models.Place["location"])]]
地点Class:
public class Place{
private String name;
private Location location;
...
getters and setters
}
位置Class:
public class Location{
private double[] coordinates;
public Location(double[] coordinates) {
this.coordinates = coordinates;
}
...
//getter and setter for coordinate field
}
谁能告诉我是什么导致了这个问题?
您需要从位置对象中删除构造函数。我已经根据您提供的信息创建了示例程序并且它成功了运行。
位置Class:
public class Location{
private double[] coordinates;
/**
* @return the coordinates
*/
public double[] getCoordinates() {
return coordinates;
}
/**
* @param coordinates the coordinates to set
*/
public void setCoordinates(double[] coordinates) {
this.coordinates = coordinates;
}
}
地点Class:
public class Place{
private String name;
private Location location;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the location
*/
public Location getLocation() {
return location;
}
/**
* @param location the location to set
*/
public void setLocation(Location location) {
this.location = location;
}
@Override
public String toString() {
return "Place: " + name + " Location: " + Arrays.toString(location.getCoordinates());
}
}
APP Class: public class 应用程序 { public static void main(String[] args) 抛出 IOException {
//read json file data to String
byte[] jsonData = Files.readAllBytes(Paths.get("places.txt"));
//create ObjectMapper instance
ObjectMapper objectMapper = new ObjectMapper();
Place place = objectMapper.readValue(jsonData, Place.class);
System.out.println("Place Object\n"+ place);
}
}
Places.txt - 包含JSON
{
"name":"Location Test",
"location":{
"coordinates":[10.1234657,10.123467]
}
}
您需要在 maven 项目中包含以下依赖项:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.1</version>
</dependency>