java - 如何使用 Jackson 的 ObjectMapper 将以下 JSON 转换为 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": "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/

相关文章:

java - 找不到 NullPointerException 的来源

java - 使用 Jackson 解析深度嵌套的 JSON 属性

Java/VMWare - vim 和 vim25 之间的交互

java - jackson 多态性: Nested Subtypes

java - 单击基于表中另一列的链接文本的链接

c - JSON C 库是线程安全的吗?

json - 在 elm 中使 Json.Decode 不区分大小写

java - spring cache redis : LazyInitializationException failed to lazily initialize a collection, 无法初始化代理 - 无 session

java - 使用文件名中包含西里尔字符的多部分文件进行放心的 POST 调用

java - 如何将整数值放入 JLabel?