Rust 反序列化大小和类型不断变化的json数组
使用serde_json处理类型和长度不断变化的json数组有什么好方法吗?我正试图在RescueTimeAPI上编写一个rust库,但在思考反序列化数据的正确方法时遇到了问题。根据提供给端点的查询参数,RescueTime将发送json对象。使用查询参数Rust 反序列化大小和类型不断变化的json数组,rust,serde,serde-json,Rust,Serde,Serde Json,使用serde_json处理类型和长度不断变化的json数组有什么好方法吗?我正试图在RescueTimeAPI上编写一个rust库,但在思考反序列化数据的正确方法时遇到了问题。根据提供给端点的查询参数,RescueTime将发送json对象。使用查询参数perspective=rank发送的一个: { "notes": "data is an array of arrays (rows), column names for rows in row_
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,
1,
"play.rust-lang.org",
"General Software Development",
2
]
]
}
主要关注点是行
字段。内部数组的详细信息根据提供的查询参数而更改。端点查询参数perspective=interval
的示例:
{
"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": [
[
"2020-10-02T00:00:00",
335,
1,
"google.com",
"Search",
1
],
[
"2020-10-02T00:00:00",
227,
1,
"steamwebhelper",
"Games",
-2
],
]
}
长度也会改变:
"row_headers": [
"Rank",
"Time Spent (seconds)",
"Number of People",
"Productivity"
],
"rows": [
[
1,
17993,
1,
-2
]
]
我写了一些我不太满意的解决方案。对于行
字段,可以使用Vec
类型(最简单的一种),但这种实现感觉有点不对
使用包含与所用查询参数相关的不同结构的枚举变量也是我探讨的一个问题,我喜欢使用一个选项,作为所用查询参数的详细信息,该选项可以封装在枚举变量中,但我觉得必须创建太多的结构/枚举变量来考虑所有可能的查询参数。我还发现自己一度陷入了match
地狱。但是,从图书馆用户的角度来看,这个选项确实符合人体工程学
对处理反序列化这些变化数组的好方法有何看法?我想最好的方法取决于反序列化后使用数据的方式(有些人可能喜欢
值
,而另一些人可能会产生匹配
地狱),但假设您希望立即获得完全类型的对象,我将创建一个包含行的泛型结构:Vec
,然后根据您期望的响应将T
交换为具体类型