如何使用JETTISON将POJO编组为JSON?

时间:2013-03-15 07:06:50

标签: java json java-ee marshalling jettison

我已经使用JETTISON将JaxB java对象编组到Json。但我无法使用JETTISON将一个简单的java对象(其中没有注释)编组到Json中。我知道可以通过使用GSON或MOXy或其他一些提供商来实现。

但我想明确“我们可以使用JETTISON吗?”。如果我们可以,怎么做?

先谢谢。

2 个答案:

答案 0 :(得分:2)

不要浪费你的时间,这根本不是Jettison的目的。可以想象,可以用你的POJO实例化一个JSONObject并以这种方式序列化它,但是它的代码存在一些问题,使其几乎不可能:

  1. 它需要传递将包含在JSON中的字段的名称。
  2. 它只能处理提供的对象的公共属性。
  3. 更不用说它无法处理任何类型的嵌套。看看这个可爱的代码:

    Class c = object.getClass();
    for (int i = 0; i < names.length; i += 1) {
            try {
                    String name = names[i];
                    Field field = c.getField(name);
                    Object value = field.get(object);
                    this.put(name, value);
            } catch (Exception e) {
                    /* forget about it */
            }
    }
    

    是的,这就是构造函数JSONObject(Object, String[])中的代码。我相信你会看到它的问题(对通用对象的原始访问,只能访问公共字段,草率异常处理)。总而言之 - 非常糟糕的'序列化'代码。

    我知道它可能不是你想听到的,但是如果你想将常规Java对象转换为JSON,那么你可能想要坚持使用一个更通用的库。

答案 1 :(得分:0)

JAXB(JSR-222)是异常配置,只需要在需要覆盖默认XML表示的注释(Jettison将XML StAX事件转换为JSON或从JSON转换)。您可以将对象包装在@XmlRootElement

的实例中,而不是JAXBElement