小编lcs*_*bdr的帖子

使用Java/Android中的Flexjson将JSONObject映射到List

我目前正在尝试使用Flexjson反序列化JSON字符串并将其映射到我的Android应用程序的Object模型.该应用程序是一种具有多个供应商的库,其中可以包含一些目录,其中包含更多目录和文档.json是从我没有影响的Web服务中获取的,看起来像这样:

{
    "library":{
        "vendor":[
            {
                "id":146,
                "title":"Vendor1",
                "catalog":[
                     {
                        "id":847,
                        "document":[
                            {
                                "id":1628,
                                "title":"Document",
                ...
                            },
                            {
                ...
                            }
                        ],
                        "title":"Catalog ",
                    },
                {
                ...
                }
              ]
            },
            {
            ...
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,每个供应商,目录,文档都由JSONObject表示,所有子目录和文档都在JSONArray中.到目前为止,一切都适用于Flexjson和以下反序列化代码:

LibraryResponse response = new JSONDeserializer<LibraryResponse>()
                    .use(Timestamp.class, new TimestampObjectFactory())
                    .deserialize(getLocalLibrary(), LibraryResponse.class);
return response.library;
Run Code Online (Sandbox Code Playgroud)

我有一个库对象有一个List<Vendor>.每个供应商都有一个List<Catalog>和一个List<Document>.

但遗憾的是,如果目录只包含单个文档或目录只包含一个目录,那么Web服务会将JSONArrays绑定到简单的JSONObjects.所以在这种情况下json看起来像这样:

"document":
    {
        "id":1628, 
        "title":"Document",
        ...
    }
Run Code Online (Sandbox Code Playgroud)

现在Flexjson不知道如何反序列化,最终我得到了一个库List<HashMap>而不是一个库.vendorX.getDocument()List<Document>.一个想法是明确告诉Flexjson如何处理这种情况,但我不知道从哪里开始.另一种方法是手动解析初始json并用适当的JSONArray替换这些JSONObject.但我觉得这样做并不是很好,因为图书馆可以很深.

我希望你能在这里提供一些指导.

java android json deserialization flexjson

5
推荐指数
1
解决办法
1046
查看次数

标签 统计

android ×1

deserialization ×1

flexjson ×1

java ×1

json ×1