java - 让 Jackson 将 Json 对象解析为原始 String

标签 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 对象中的各种其他对象。

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

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

最佳答案

讨厌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("黄色"), new MyAwesomeJson("再见")));

[“黄色”,“再见”]

关于java - 让 Jackson 将 Json 对象解析为原始 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22262388/

相关文章:

Nvidia Eclipse-Nsight 中的 Java 开发

java - IText 7 如何在页眉中添加div或段落而不与页面内容重叠?

java - 如何用java中的其他字符串替换文件中的字符串

json - 将两个域对象值显示为一个JSON输出

iPhone JSON 问题

json - 无法将 JSON 绑定(bind)到 d3

json - 无法从 NodeJS API 调用获取 JSON

java - 如何获取纯 JSON 字符串而不是 HTML

c++ - 使用 C++ Python API 逐行执行 python 脚本

c# - 格式化 json 字符串并将其传递给带有参数的正文会出错