Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么“;无法反序列化``out-of-START_对象标记”;使用Jackson时抛出_Java_Json_Jackson - Fatal编程技术网

Java 为什么“;无法反序列化``out-of-START_对象标记”;使用Jackson时抛出

Java 为什么“;无法反序列化``out-of-START_对象标记”;使用Jackson时抛出,java,json,jackson,Java,Json,Jackson,感谢您提出有关属性名称不匹配的问题。然而,我已经使它们一致,但抛出相同的错误 我正在使用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

感谢您提出有关属性名称不匹配的问题。然而,我已经使它们一致,但抛出相同的错误


我正在使用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]

提前谢谢你的帮助

我相当肯定这是一个区分大小写的问题。默认情况下,Jackson查找属性“getters”,因此您有“getFirstName”。但是,您的JSON文件是“firstname”


请在源json文件和类之间使用相同的大小写敏感度重试。

注意lastname(您的POJO)与lastname(json)的拼写。将pojo更改为firstName和lastName以匹配JSON,或在每个字段上方设置注释,如下所示:

public class User {
    @JsonProperty("firstname");
    String firstName;
    @JsonProperty("lastname");
    String lastName;

这是因为属性不匹配。你可以试试这个

public class User {
@JsonProperty("firstname")
    String firstName;
@JsonProperty("lastname")
    String lastName;  
}

@JsonProperty
用于指示外部属性名称,数据格式中使用的名称(JSON或其他受支持的数据格式)

JSON文件中的根级对象是JSON对象,但您告诉jackson以用户数组的形式读取该文件

请尝试以下内容:

[
    { "firstName":"Tom", "lastName":"Jackson"},         
    { "firstName":"Jenny", "lastName":"Mary"},  
    { "firstName":"Red", "lastName":"Blue"},        
    { "firstName":"Jason", "lastName":"John"},  
    { "firstName":"May", "lastName":"Black"}    
 ]

谢谢你的快速回复。我尝试过将firstname修改为firstname,并将lastname修改为lastname,但输出结果是相同的。您到底更改了什么?JSON文件?请参阅我的问题更新,我已修改JSON文件。我恐怕这不是根本原因,请检查我的问题更新。我恐怕这不是根本原因,请检查我的问题更新,谢谢。