【问题标题】:Jackson POJO mapping杰克逊 POJO 映射
【发布时间】:2013-08-13 16:25:01
【问题描述】:

我正在尝试通过杰克逊将以下 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
         }
      ]
   }
}

波乔:

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.


}

【问题讨论】:

  • 您的 JSON 不会生成 gud 对象...您对节号或垃圾号有限制吗?

标签: json spring-mvc jackson


【解决方案1】:

如果每个部分(以及每块垃圾)的内容在内部具有相同的结构,则将“部分”设为另一个类,并且将“垃圾”设为“垃圾”。

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”不同。否则,只需使用其中包含两个字符串的类。

【讨论】:

  • 好吧,酷!我曾尝试使用聚合类进行映射,但它不起作用。所以,我不确定杰克逊如何映射包含的类。这就是我一直在寻找的......我会试一试!谢谢。
  • 不错。地图的原因是每个垃圾部分内会有多个junk1,junk2,junkx。我不存储它的原因是因为我不关心这些值,因为我只是传递垃圾 json 和内容。我在原帖中没有说清楚。
  • 好的。然后忽略我的垃圾类。
  • 无论哪种方式都只是测试过。像宣传的那样工作。惊人的!谢谢李米多! :)
【解决方案2】:

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

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

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

【讨论】:

  • 非常酷!我有一个用例,我正在构建一个用于测试的 json 有效负载,并且只有一半正在使用的有效负载真正被映射。另一半是空白的,所以这将在垃圾案例和我的另一半 json 有效负载用例中完美运行。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 2012-10-01
  • 1970-01-01
相关资源
最近更新 更多