Java 如何使用Jackson的ObjectMapper将下面的JSON转换为POJO
我试图在下面的代码中使用Jackson的ObjectMapper类将下面的JSON转换为POJO,但它引发了异常。谁能帮我解决这个问题。 实际上,JSON是由UI提供的,所以不能更改它的格式。我需要使用Jackson库将这个JSON解析为java对象 JSON:data.JSONJava 如何使用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
{
"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;
}