1

Autobeans 非常强大。然而,就我的一生而言,我无法弄清楚如何处理根级别的 JSON 映射或列表。

大多数文档建议您有一个已定义的顶级对象,该对象可以包含各种子对象(包括列表和地图),但没有关于自动生成地图或列表的文档。

public interface Types {
    List<FieldType> getTypes();
}

public interface TypesAutoBeanFactory extends AutoBeanFactory {
    AutoBean<Types> jsonItems();
}

以上是完成列表的参考方法,其中传入的数据将如下所示:

{"types":[{...},{...}]}

然而,我发现这很难看,REST 服务应该正确返回:

[{...},{...}]

但我找不到使用 Autobean 框架处理此问题的简单方法。根级地图也是如此。

为什么这不起作用,是否有替代方法:

public interface TypesAutoBeanFactory extends AutoBeanFactory {
    AutoBean<List<FieldType>> jsonItems();
}
4

3 回答 3

0

我使用您描述的方法来解码包含单个键下列表的 JSON 有效负载。

这个答案还解释了另一种方法,您可以将您提到的方法与未键入的 JSON 列表有效负载结合起来。

于 2013-11-22T16:02:38.827 回答
0

我可以看到的另一种简单方法不是完全的 autobean 解决方案。

很明显,如果字符串以 , 开头[{,那么它就是数组,所以我们可以使用

Object[] array = jsonString.replaceAll("[\[\]]","").split(",");

然后只需使用 autobean 处理数组元素。

于 2013-09-18T11:45:05.763 回答
0

AutoBean 的工作原理是扫描您的类getset方法(也可能是is方法)。 List没有那些方法。

List您可以编写一个补丁来将内部解析方法直接挂钩到外部decode方法AutoBeanCodex- 您需要的大部分代码都在其中。也许decode(Class type, Splittable input)你可以只添加decodeList(Splittable input). 结果可能是一个实际的 List 而不是 AutoBean。

于 2012-03-20T21:42:07.880 回答