Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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 如何使用Jackson的ObjectMapper将下面的JSON转换为POJO_Java_Json_Jackson_Pojo - Fatal编程技术网

Java 如何使用Jackson的ObjectMapper将下面的JSON转换为POJO

Java 如何使用Jackson的ObjectMapper将下面的JSON转换为POJO,java,json,jackson,pojo,Java,Json,Jackson,Pojo,我试图在下面的代码中使用Jackson的ObjectMapper类将下面的JSON转换为POJO,但它引发了异常。谁能帮我解决这个问题。 实际上,JSON是由UI提供的,所以不能更改它的格式。我需要使用Jackson库将这个JSON解析为java对象 JSON:data.JSON { "0": { "location": "6", "userType": "1", "isActive": "1", "userId": "Sh

我试图在下面的代码中使用Jackson的ObjectMapper类将下面的JSON转换为POJO,但它引发了异常。谁能帮我解决这个问题。 实际上,JSON是由UI提供的,所以不能更改它的格式。我需要使用Jackson库将这个JSON解析为java对象

JSON:data.JSON

{
    "0": {
        "location": "6",
        "userType": "1",
        "isActive": "1",
        "userId": "Shailesh@gmail.com"
    },
    "1": {
        "location": "7",
        "userType": "2",
        "isActive": "1",
        "userId": "Vikram@gmail.com"
    }
}
DTOs:

public class UsersList {
    List<UserDetails> users;
}

public class UserDetails {
    private String userId;
    private String location;
    private String userType;
    private String isActive;

    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getLocation() {
        return location;
    }
    public void setLocation(String location) {
        this.location = location;
    }
    public String getUserType() {
        return userType;
    }
    public void setUserType(String userType) {
        this.userType = userType;
    }
    public String getIsActive() {
        return isActive;
    }
    public void setIsActive(String isActive) {
        this.isActive = isActive;
    }
}
例外情况:
com.fasterxml.jackson.databind.JsonMappingException:由于输入结束,没有要映射的内容

JSON的格式是
映射
看看,键
0
有用户
”Shailesh@gmail.com“
和带有
的键
1
”Vikram@gmail.com“

然后将其映射到
UserDetails

 UserDetails sample = new ObjectMapper().readValue(instream, UsersList.class);

首先,在将json字符串反序列化为DTO之前,DTO应该不包含参数构造函数、getter和setter。 您当前的DTO将匹配如下所示的字符串

{
    "users": [
        {
            "location": "6",
            "userType": "1",
            "isActive": "1",
            "userId": "Shailesh@gmail.com"
        },
        {
            "location": "7",
            "userType": "2",
            "isActive": "1",
            "userId": "Vikram@gmail.com"
        }
    ]
}
与上面提供的字符串示例匹配的DTO如下所示

public class UsersList {
    UserDetails zero;
    UserDetails one;

    public UsersList() {
    }

    public UserDetails getZero() {
        return zero;
    }

    public void setZero(final UserDetails zero) {
        this.zero = zero;
    }

    public UserDetails getOne() {
        return one;
    }

    public void setOne(final UserDetails one) {
        this.one = one;
    }
}

您可以使用jackson的ObjectMapper.readValue()方法

我认为您的解决方案如下:

    String jsonBody = yourJson;
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        UserDetailsMapDao userDetailsMapDao = objectMapper
                .readValue(jsonBody, UserDetailsMapDao.class);
    } catch (JsonParseException e) {
        // TODO Exception Handling
    } catch (JsonMappingException e) {
        // TODO Exception Handling
    } catch (IOException e) {
        // TODO Exception Handling
    }
您的DAO将如下所示:

公共类UserDetailsMapDao{

private Map<String, UserDetails> userDetailsMap;

public String getUserDetailsMap() {
return userDetailsMap;
}
public void setUserDetailsMap(String userDetailsMap) {
this.userDetailsMap = userDetailsMap;
}
}

public class UsersList {
    UserDetails zero;
    UserDetails one;

    public UsersList() {
    }

    public UserDetails getZero() {
        return zero;
    }

    public void setZero(final UserDetails zero) {
        this.zero = zero;
    }

    public UserDetails getOne() {
        return one;
    }

    public void setOne(final UserDetails one) {
        this.one = one;
    }
}
    String jsonBody = yourJson;
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        UserDetailsMapDao userDetailsMapDao = objectMapper
                .readValue(jsonBody, UserDetailsMapDao.class);
    } catch (JsonParseException e) {
        // TODO Exception Handling
    } catch (JsonMappingException e) {
        // TODO Exception Handling
    } catch (IOException e) {
        // TODO Exception Handling
    }
private Map<String, UserDetails> userDetailsMap;

public String getUserDetailsMap() {
return userDetailsMap;
}
public void setUserDetailsMap(String userDetailsMap) {
this.userDetailsMap = userDetailsMap;
}
private String userId;
private String location;
private String userType;
private String isActive;

public String getUserId() {
    return userId;
}
public void setUserId(String userId) {
    this.userId = userId;
}
public String getLocation() {
    return location;
}
public void setLocation(String location) {
    this.location = location;
}
public String getUserType() {
    return userType;
}
public void setUserType(String userType) {
    this.userType = userType;
}
public String getIsActive() {
    return isActive;
}
public void setIsActive(String isActive) {
    this.isActive = isActive;
}