Я хотел бы преобразовать следующую строку /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 \":\"[email protected]\"\r\n}"}
Как преобразовать в Pojo с помощью Jackson ObjectMapper. 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;
}
}
Часть списка в приведенной выше строке должна отображаться в файле 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;
}
}
Следующий код должен помочь.
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();
Поскольку ваш объект JSON не содержит информации о типе, лучшим подходом было бы использование специального класса десериализатора для Jackson, по крайней мере для внешнего класса. Кроме того, вы можете попробовать аннотировать свои классы POJO с помощью аннотаций Джексона и надеяться, что это произойдет правильно.
В любом случае вам нужно будет сделать Джексон осведомленным о вашем контексте, вызвав один из методов ObjectMapper.readValue()
с соответствующим аргументом типа класса, чтобы Джексон знал, что именно десериализуется.
ArrayList
и LinkedHashMap
. По умолчанию Джексон ничего не знает о ваших POJO. Можно заставить Джексона добавить информацию о типе (то есть имя класса) в ваш JSON, но это добавит поля в объект JSON. Как правило, безопаснее использовать аннотации или пользовательский десериализатор вместе с вызовом readValue()
с правильным аргументом типа класса.