Как использовать Jackson ObjectMapper для преобразования в Pojo для нескольких данных

1

Я хотел бы преобразовать следующую строку /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;
    }       
}
Теги:
jackson
jersey
jsonobject

2 ответа

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();

  • 0
    Учитывая, что POJO в коде OP не являются Сериализуемыми, и при этом у них нет аннотаций Джексона, это хорошая идея? Похоже, очень хороший способ сделать систему чувствительной к малейшим изменениям кода ...
  • 0
    Вам также не нужно, если цель состоит в том, чтобы просто разобрать json в java-объект и не искать каких-либо манипуляций. Поведение по умолчанию позаботится о преобразовании без каких-либо проблем. Приведенный выше подход будет сохранять код чистым и читаемым.
0

Поскольку ваш объект JSON не содержит информации о типе, лучшим подходом было бы использование специального класса десериализатора для Jackson, по крайней мере для внешнего класса. Кроме того, вы можете попробовать аннотировать свои классы POJO с помощью аннотаций Джексона и надеяться, что это произойдет правильно.

В любом случае вам нужно будет сделать Джексон осведомленным о вашем контексте, вызвав один из методов ObjectMapper.readValue() с соответствующим аргументом типа класса, чтобы Джексон знал, что именно десериализуется.

  • 0
    Благодарю. А что такое информация о типе и как добавление информации о типе изменит преобразование в POJO. На какие аннотации Джексона вы ссылаетесь?
  • 0
    @Harish: как таковой, ваш JSON-объект может быть идеально сопоставлен с основными классами Java, такими как ArrayList и LinkedHashMap . По умолчанию Джексон ничего не знает о ваших POJO. Можно заставить Джексона добавить информацию о типе (то есть имя класса) в ваш JSON, но это добавит поля в объект JSON. Как правило, безопаснее использовать аннотации или пользовательский десериализатор вместе с вызовом readValue() с правильным аргументом типа класса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню