java如何使用Jackson的ObjectMapper将下面的JSON转换为POJO
我试图在下面的代码中使用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;
}
}
测试类: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);
}
}
}
例外情况: 通用域名格式。fasterxml。杰克逊。数据绑定。JsonMappingException:由于输入结束,没有要映射的内容
# 1 楼答案
JSON的格式是
Map<String, UserDetails>
看看,key0
有user"Shailesh@gmail.com"
,key1
有"Vikram@gmail.com"
如果使用jackson则使用
@JsonAnySetter
然后把它映射到
UserDetails