【问题标题】:Have Jackson parse Json object as primitive String让杰克逊将 Json 对象解析为原始字符串
【发布时间】:2014-03-07 23:01:51
【问题描述】:

对于任何熟悉构建 API 的人来说都是一个简单的问题/问题...为了简单起见,我更喜欢将许多对象表示为字符串而不是 Json 对象。

例如,我有一个日期范围,我可以(并且曾经)将它放入一个对象(具有开始结束日期成员),但考虑到我们可以有多个这样的范围,我可以改为使用这个......

['20130210-20130315','20130520-20130524']

IMO 看起来比哪个更简单、更干净

[
  {
    "start":"2013-02-10",
    "end":"2013-03-15"
   },
  {
    "start":"2013-05-20",
    "end":"2013-05-24"
  }
]

这适用于服务的主要 Json 对象中的各种其他对象。

我只将它们视为字符串的困境是,我失去了用接口标记它们的能力,这些接口在整个代码中都被使用。 (例如,这个 Json 可能特别标有“过滤器”接口,许多方法都采用该接口。)

也就是说,有没有办法同时满足这两个条件,即拥有一个自定义 Json 对象(实现我自己的接口等)并让 Jackson 像 String 原语一样解析它?我希望这可以在没有涉及自定义序列化和反序列化的大量工作的情况下完成,因为我有很多对象。

【问题讨论】:

  • 糟糕,我复制了this... @JsonValue 解决了这个问题。库里奥。

标签: java json api jersey jackson


【解决方案1】:

讨厌duplicating 的帖子,因此试图在此处添加 一些 值——这正是我想要的数组——

public class MyAwesomeJson extends JacksonObject implements S {

   private final String value;

   public MyAwesomeJson(String value) {
     this.value = value;
   }

   @JsonValue
   public String getValue() {
     return value;
   }
}

然后得到数组形式--

public class MyAwesomeJsonArray extends JacksonObject implements A {

   private final Set<MyAwesomeJson> values = Sets.newLinkedHashSet();

   public MyAwesomeJsonArray(MyAwesomeJson... values) {
     this.values.addAll(Arrays.asList(values));
   }

   @JsonValue
   public Set<MyAwesomeJson> getValues() {
     return values;
   }
}

System.out.println(new MyAwesomeJsonArray(new MyAwesomeJson("Yellow"), new MyAwesomeJson("Goodbye")));

["Yellow","Goodbye"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多