杰克逊POJO映射

时间:2013-08-13 16:25:01

标签: json spring-mvc jackson

我试图通过杰克逊将以下json映射到pojo。我有第一部分工作(直到部分)。但是,第二部分我不知道如何映射" section1"也许这里有一个包含的pojo或最佳实践?

json通过休息电话收到:

{
   "val1":100,
   "val2":2.75,
   "junk":[
      {
         "junk1":36,
         "junk2":78
      },
      {
         "junk1":36,
         "junk2":78
      }
   ],
   "section1":{     // <- There will be another section2, section3,...
      "val1":100,
      "val2":2.75,
      "junk1":[
         {
            "junk1":36,
            "junk2":78
         },
         {
            "junk1":36,
            "junk2":78
         }
      ],
      "junk2":[
         {
            "junk1":36,
            "junk2":78
         },
         {
            "junk1":36,
            "junk2":78
         }
      ]
   }
}

POJO的:

public class view
{
    private int val1;
    private float val2;
    private List<Map<String, String> > junk; //<-Ok as I just pass to another class

        // How to store "section" ... and want to keep junk1, junk2 same
        // placeholder like I have for junk in main section above.


}

2 个答案:

答案 0 :(得分:1)

如果每个部分(和每个垃圾片段)的内容在内部具有相同的结构,则使'section'成为另一个类,也是'junk'。

public class view
{
    private int val1;
    private float val2;
    private List<Junk> junk; //<-Ok as I just pass to another class
    private Section section1;
    private Section section2;
    ... etc ...
}

public class Section {
   private int val1;
    private float val2;
    private List<Junk> junk; //<-Ok as I just pass to another class
}

public class Junk {
   private String junk1;
   private Strign junk2;
}

我假设你展示的结构而不是一系列的部分。

另外,地图不是存储两个随机字符串的好地方。但杰克逊会允许它。唯一的例外是如果字段的名称将从'junk1'和'junk2'变化。否则只需使用一个包含两个字符串的类。

答案 1 :(得分:1)

请注意,您可以指出应忽略“垃圾”。有几种方法可以做到;一个是做:

@JsonIgnoreProperties({"junk"})
public class MyClass { ... }

这样做的好处是不需要内存来存储匹配数据;并且它可以加速解析(不是很多,但有些;解析器仍然需要解码JSON以跳过它等)。