反序列化更改大小和类型的json数组

问题描述

有没有一种好的方法来使用serde_json处理类型和长度变化的json数组?我正在尝试通过RescueTime API编写一个rust库,而无法思考一种适当的方法来反序列化数据。 RescueTime根据提供给端点的查询参数,将发送json对象。使用查询参数perspective=rank发送的一封邮件:

{
        "notes": "data is an array of arrays (rows),column names for rows in row_headers","row_headers": [
            "Rank","Time Spent (seconds)","Number of People","Activity","Category","Productivity"
        ],"rows": [
            [
                1,2886,1,"youtube.com","Video",-2
            ],[
                3,682,"play.rust-lang.org","General Software Development",2
            ]
        ]
}

主要关注点是rows字段。内部数组的详细信息根据提供的查询参数而变化。端点查询参数perspective=interval的示例:

{
        "notes": "data is an array of arrays (rows),"rows": [
            [
                "2020-10-02T00:00:00",335,"google.com","Search",1
            ],[
                "2020-10-02T00:00:00",227,"steamwebhelper","Games",]
}

长度也会改变:

        "row_headers": [
            "Rank",17993,-2
            ]
        ]

我写了一些我不太满意的解决方案。一个人在Vec<serde_json::Value>字段中使用了rows类型(最简单的一种),但是这种实现感觉不对。

我探索了使用包含与查询参数相关的不同结构的enums变体,这也是我探索过的一种方法,我喜欢将选项作为查询参数的详细信息,可以将其封装在enum变体中,但是我觉得太多的结构/必须创建枚举变量来解决所有可能的查询参数。我还发现自己在某一时刻淹没在match地狱中。但是从库用户的角度来看,此选项对于人体工程学而言似乎不错。

有人对处理这类不断变化的数组进行反序列化的好方法有何看法?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...