感谢有关属性名称不匹配的问题。但是,我已经使它们保持一致但错误相同。
我正在使用Jackson将JSON数组转换为Java对象数组。
代码如下所示,这是代码条目:
import java.io.File;
import com.fasterxml.jackson.databind.ObjectMapper;
import jackson.vo.User;
public class JsonConvertTest {
public static void main(String args[]){
try{
ObjectMapper objectMapper = new ObjectMapper();
File file = new File("results.json");
User[] users= objectMapper.readValue(file, User[].class);
}catch(Exception e){
e.printStackTrace();
}
}
}
这是值对象
package jackson.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
@JsonProperty("firstName")
String firstName;
@JsonProperty("lastName")
String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
这是JSON数组:
{
"users":[
{ "firstName":"Tom", "lastName":"Jackson"},
{ "firstName":"Jenny", "lastName":"Mary"},
{ "firstName":"Red", "lastName":"Blue"},
{ "firstName":"Jason", "lastName":"John"},
{ "firstName":"May", "lastName":"Black"}
]
}
输出结果为:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `jackson.vo.User[]` out of START_OBJECT token
at [Source: (File); line: 1, column: 1]
提前感谢您的帮助。
答案 0 :(得分:2)
JSON文件中的根级对象是JSON 对象,但是您要告诉jackson将该文件作为用户数组读取。
尝试以下内容:
{=INDEX(B:B;SMALL(A:A=E2;ROW());ROW())}
答案 1 :(得分:0)
我很确定这是一个区分大小写的问题。杰克逊默认查找属性“getters”,因此您拥有“getFirstName”。但是,您的JSON文件是“firstname”。
再次尝试使用源json文件和类之间的区分大小写相同。
答案 2 :(得分:0)
注意lastname(您的POJO)与lastName(Json)的拼写。将您的pojo更改为firstName和lastName以匹配您的JSON或在每个字段上方设置注释,如下所示:
public class User {
@JsonProperty("firstname");
String firstName;
@JsonProperty("lastname");
String lastName;
答案 3 :(得分:0)
这是因为财产不匹配。你可以试试这个
public class User {
@JsonProperty("firstname")
String firstName;
@JsonProperty("lastname")
String lastName;
}
@JsonProperty
用于表示外部属性名称,数据格式使用的名称(JSON或其他支持的数据格式之一)