如何使用Jackson ObjectMapper转换为Pojo以获取多个数据

时间:2014-03-27 07:12:26

标签: java json jersey jackson jsonobject

我想将以下字符串/ JSONObject转换为POJO,

{"list":["\r\n{\r\n\"id\":\"1\",\r\n\"protocol\":\"udp\",\r\n\"srcPorts= \":\"3000-4000    \",\r\n\"destPorts\":\"1790-2000\"\r\n}","\r\n{\r\n\"id\":\"2\",\r\n    \"protocol\":\"tcp\",\r\n\"srcPorts\":\"3000-4000\",\r\n\"destPorts\":\"1790-2000    \"\r\n}"],"user":"\r\n{\r\n\"name\":\"John\",\r\n\"address\":\"x.x.x.x\",\r\n\"email     \":\"john@p.com\"\r\n}"}

如何使用Jackson ObjectMapper转换为Pojo。 2个Pojo类如下。

上面字符串中的用户部分应映射到java文件 - User.java

public class User 
{
    private String name;

    private String address;

    private String email;

    public String getName()
    {
        return name;
    }

    public void setName(String name) 
    {
        this.name = name;
    }

    public String getAddress() 
    {
        return address;
    }

    public void setaddress(String Address) 
    {
        this.address = address;
    }

    public String getEmail()
    {
        return email;
    }

    public void setEmail(String email)
    {
        this.email = email;
    }   
}

上面字符串中的List部分应映射到java文件 - TestCase.java

public class TestCase 
{
    private String id;
    private String protocol;
    private String srcPorts;
    private String destPorts;

    public String getProtocol()
    {
        return protocol;
    }

    public void setProtocol(String protocol) 
    {
        this.protocol = protocol;
    }

    public String getSrcPorts() 
    {
        return srcPorts;
    }

    public void setSrcPorts(String srcPorts) 
    {
        this.srcPorts = srcPorts;
    }

    public String getDestPorts() 
    {
        return destPorts;
    }

    public void setDestPorts(String destPorts) 
    {
        this.destPorts = destPorts;
    }

    public String getID() 
    {
        return id;
    }

    public void setID(String id) 
    {
        this.id = id;
    }       
}

2 个答案:

答案 0 :(得分:0)

由于您的JSON对象不包含任何类型信息,因此最好的方法是使用a custom deserializer class for Jackson,至少对于外部类。或者,您可以尝试使用Jackson annotations注释您的POJO类,并希望正确的事情发生。

在任何情况下,您都必须通过使用正确的类类型参数调用其中一个ObjectMapper.readValue()方法来让Jackson知道您的上下文,这样Jackson就会知道它被反序列化了。

答案 1 :(得分:0)

以下代码应该有所帮助。

class ParseJson{

private User user;
private TestCase testCase;

//getter and setter methods
}
//and then call objectMapper - 
String jsonString = "";//Json input
ObjectMapper mapper = new ObjectMapper();
ParseJson parsedJson = mapper.readValue(jsonString, ParseJson.class);

User user = parsedJson.getUser();
TestCase testCase = parsedJson.getTestCase();

class ParseJson{ private User user; private TestCase testCase; //getter and setter methods } //and then call objectMapper - String jsonString = "";//Json input ObjectMapper mapper = new ObjectMapper(); ParseJson parsedJson = mapper.readValue(jsonString, ParseJson.class); User user = parsedJson.getUser(); TestCase testCase = parsedJson.getTestCase();