【发布时间】:2012-10-21 00:30:34
【问题描述】:
我目前正在尝试使用 Flexjson 反序列化 JSON 字符串并将其映射到我的对象模型 安卓应用。该应用程序是一种具有多个供应商的库,可以有一些目录和更多目录 和其中的文件。 json 是从我没有影响的 Web 服务中获取的,看起来像这样:
{
"library":{
"vendor":[
{
"id":146,
"title":"Vendor1",
"catalog":[
{
"id":847,
"document":[
{
"id":1628,
"title":"Document",
...
},
{
...
}
],
"title":"Catalog ",
},
{
...
}
]
},
{
...
}
]
}
}
因此,每个供应商、目录、文档都由 JSONObject 表示,所有子目录和文档都在 JSONArray 中。 到目前为止,Flexjson 和以下反序列化代码一切正常:
LibraryResponse response = new JSONDeserializer<LibraryResponse>()
.use(Timestamp.class, new TimestampObjectFactory())
.deserialize(getLocalLibrary(), LibraryResponse.class);
return response.library;
我确实有一个具有List<Vendor> 的库对象。每个供应商都有一个List<Catalog> 和一个List<Document>。
但不幸的是,如果目录仅包含单个文档,则 Web 服务会将 JSONArrays 绑定到简单的 JSONObjects 或者一个目录只包含一个目录。所以这种情况下的 json 看起来像这样:
"document":
{
"id":1628,
"title":"Document",
...
}
现在 Flexjson 不知道如何反序列化,我最终得到一个 library.vendorX.getDocument() 是 List<HashMap> 而不是 List<Document>。
一个想法是明确告诉 Flexjson 如何处理这种情况,但我不知道从哪里开始。另一种方法是手动解析初始 json 并将此类 JSONObjects 替换为适当的 JSONArray。但我认为这种方式不太好走,因为图书馆可能很深。
希望您能在这里提供一些指导。
【问题讨论】:
标签: java android json deserialization flexjson