gpt4 book ai didi

java - 将 JSON 对象数组反序列化为 Java 中的根对象?

转载 作者:太空宇宙 更新时间:2023-11-03 13:27:37 26 4
gpt4 key购买 nike

我的目标是在 Android 上反序列化 BSON 文档数组。当外部数组是匿名的时,反序列化失败(尝试反序列化为 CustomObject[].class)。当数组被包装在一个对象中时,其键包含数组,它就可以工作(反序列化为 WrapperObject.class)。

在 JSON 中,对象看起来像这样:

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

根据BSON Specification BSON 数组是一个常规的 BSON 文档,其键值为整数。换句话说,BSON 中的同一个对象看起来像这样:

{"0":{"id":....},"1":{"id":....},"2":{"id":....}....}

我正尝试使用 bson4jackson 反序列化上述内容,但它抛出了“无法从 START_OBJECT token 中反序列化 x 的实例”错误,在堆栈跟踪中我注意到意外标记是“0”——数组开头的 BSON 表示。

目前,我的解决方案是将数组包装在一个新的根对象中,在 JSON 中,它看起来像这样:

{"data":[{"id":....},{"id":....},{"id":....},....]}


您能否设置 bson4jackson 或任何其他 Java 反序列化库,将根对象视为一个数组并按原样处理它,而不进行换行?

最佳答案

原因是 bson4jackson 是一个低级库,它不知道当前正在解析的对象的类型。在 BSON 数组中是对象,bson4jackson 只是假设每个文档都有一个对象作为其根。

但是,有一个解决方法。每当读取数组时,Jackson 都会调用低级解析器的 isExpectedStartArrayToken() 方法。因此,如果当前对象是一个文档,但 bson4jackson 可以切换到数组解析,但需要一个数组。

修复刚刚实现。详情请见:
https://github.com/michel-kraemer/bson4jackson/issues/31

关于java - 将 JSON 对象数组反序列化为 Java 中的根对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17320921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com