我正在尝试使用 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"
}
}
DTO:
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;
}
}
测试类:HandlerUtil
import java.io.IOException;
import java.io.InputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mcmcg.ams.lambda.model.UserDetails;
public class HandlerUtil {
private static final Logger LOG = LogManager.getLogger(HandlerUtil.class);
private HandlerUtil() {
}
public static void main(String[] args) {
try (InputStream instream = HandlerUtil.class.getClassLoader().getResourceAsStream("data.json")) {
UserDetails sample = new ObjectMapper().readValue(instream, UsersList.class);
System.out.println(sample.toString());
} catch (IOException ex) {
LOG.error("Exception occurred while laoding data.json file : ", ex);
}
}
}
异常(exception): com.fasterxml.jackson.databind.JsonMappingException:由于输入结束而没有要映射的内容
最佳答案
您可以使用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
}
你的 Daos 将是这样的:
公共(public)类UserDetailsMapDao {
private Map<String, UserDetails> userDetailsMap;
public String getUserDetailsMap() {
return userDetailsMap;
}
public void setUserDetailsMap(String userDetailsMap) {
this.userDetailsMap = userDetailsMap;
}
}
公共(public)类用户详细信息{
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;
}
}
关于java - 如何使用 Jackson 的 ObjectMapper 将以下 JSON 转换为 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55147518/