让杰克逊将Json对象解析为原始字符串

时间:2014-03-07 23:01:51

标签: java json api jersey jackson

熟悉构建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对象(实现我自己的接口等)并让杰克逊解析它像一个字符串原语?我希望这可以在没有太多涉及自定义序列化的工作的情况下完成。反序列化,因为我有很多对象。

1 个答案:

答案 0 :(得分:0)

讨厌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"]