问题描述
有没有一种好的方法来使用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 (将#修改为@)