Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 反序列化大小和类型不断变化的json数组_Rust_Serde_Serde Json - Fatal编程技术网

Rust 反序列化大小和类型不断变化的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_

使用serde_json处理类型和长度不断变化的json数组有什么好方法吗?我正试图在RescueTimeAPI上编写一个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,
                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
交换为具体类型