有没有一种简单的方法可以在 Android 上展平 json:api 响应?

Posted

技术标签:

【中文标题】有没有一种简单的方法可以在 Android 上展平 json:api 响应?【英文标题】:Is there an easy way to flatten a json:api response on Android? 【发布时间】:2020-08-15 13:14:59 【问题描述】:

我正在尝试将以下响应展平,而不必将其解析为一个类。这样做的原因是服务器可以随时添加或删除字段,因此它需要是动态的。我们还有另一个服务,它返回查找路径,我们用它来从扁平响应中获取数据——比如“$.detail.att_one”有一个 ios 库可以做我正在寻找的确切事情,但就我而言在 android 上找不到类似的东西:https://github.com/infinum/Japx


"data": [
    
        "type": "items",
        "id": "14",
        "attributes": 
            "item_type": "shape_circle",
            "code": null,
            "size": "70"
        ,
        "relationships": 
            "detail": 
                "data": 
                    "type": "circle",
                    "id": "90"
                
            ,
            "metadata": 
                "data": "metadata"
            
        ,
        "links": 
            "self": "http://url/item/14"
        
    
],
"included": [
    
        "type": "circle",
        "id": "90",
        "attributes": 
            "att_one": 4,
            "att_two": "11111111111",
            "att_three": "Bob"
        
    
]

我正在寻找的结果:


"data": [
    
        "id": "14",
        "type": "items",
        "item_type": "shape_circle",
        "code": null,
        "size": "70",
        "metadata": 
            "data": "metadata"
        ,
        "detail": 
            "type": "circle",
            "id": "90",
            "att_one": 4,
            "att_two": "11111111111",
            "att_three": "Bob"
        ,
        "links": 
            "self": "http://url/item/14"
        
    
]

【问题讨论】:

你知道 OkHttp 或 Retrofit 库是如何工作的吗?看看它们以及它们如何使用 Gson 或 Moshi 进行序列化。 是的,我已经在使用 Retrofit 和 Moshi 从服务器获取响应。我可以使用与响应中的字段相对应的@Json 字段创建一个类,但我想避免这种情况,因为我希望能够传递原始 json,但只有在它被展平为像上面的结果 所以你不想序列化响应?使用 JSON 库接收 JSON 对象,然后将其传递。 是的,这就是我想要做的,我的问题是扁平化 json 以将包含的内容合并为我正在寻找的格式(我的问题中的最后一个 json 代码块),然后还有能够将其取消展平,以便我可以将其发送回服务器 【参考方案1】:

有一个很好的 JSONAPI 库可以做这件事,但你必须为它定义资源类。

查看jasminb/jsonapi-converter

它递归地展平所有包含的关系并处理继承。

【讨论】:

以上是关于有没有一种简单的方法可以在 Android 上展平 json:api 响应?的主要内容,如果未能解决你的问题,请参考以下文章

有没有一种简单的方法可以在 Android 视图的顶部和底部添加边框?

如何在不使用 NumPy 复制的情况下展平多维数组的轴?

将任何版本的 PDF 转换为扫描/展平 PDF 文件的最佳方法

Numpy 数组:连接展平和添加维度

scala中的“unlist”(例如展平一系列序列的序列......)

Javascript函数没有正确展平数组