有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    JSON的格式是Map<String, UserDetails>看看,key 0有user "Shailesh@gmail.com",key 1"Vikram@gmail.com"

    TypeReference<HashMap<String,UserDetails>> typeRef 
            = new TypeReference<HashMap<String,UserDetails>>() {};
    
    HashMap<String,UserDetails> sample = new ObjectMapper()
                                      .readValue(instream, typeRef);
    

    如果使用jackson则使用@JsonAnySetter

    public class UsersList {
    
    private Map<String, UserDetails> users = new HashMap<>();
    
    @JsonAnySetter
    public void setUsers(String name, UserDetails value) {
    this.addressDetails.put(name, value);
        }
    
     }
    

    然后把它映射到UserDetails

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