gpt4 book ai didi

json - 将可变长度的 JSON 数组解码为 Rust 数组

转载 作者:行者123 更新时间:2023-11-29 08:10:08 24 4
gpt4 key购买 nike

我正在尝试解码此数据:

{
"ok": true,
"people": [
{
"name": "John",
"age": "10"
}
]
}

进入结构体,代码为:

extern crate rustc_serialize;

use rustc_serialize::json;

#[derive(RustcDecodable)]
struct Man {
name: String,
age: i32,
}

#[derive(RustcDecodable)]
struct Men {
ok: bool,
people: [Man; 16],
}

...

let json: Men = json::decode(&data).unwrap();

...

问题是当Men中的数组长度与JSON中相应字段的长度不完全匹配时,会出现这个错误:

thread '<main>' panicked at 'called `Result::unwrap()`
on an `Err` value: ApplicationError("wrong array length")',
../src/libcore/result.rs:738

关于如何处理这个问题有什么想法吗?也欢迎提供一般代码风格建议。

最佳答案

拥有一个仅部分填充的数组并没有多大意义。数组静态地知道要分配多少空间,但您必须用一些东西 来填充该空间,以避免未初始化数据的一些安全问题。他们没有“未使用”点的概念。

最简单的解决方法是使用 Vec :

#[derive(RustcDecodable)]
struct Men {
ok: bool,
people: Vec<Man>,
}

Vec 表示一个可调整大小 的连续数据量。它知道分配了多少空间以及这些分配中有多少是有效的,永远不会让您访问无效的项目。

关于json - 将可变长度的 JSON 数组解码为 Rust 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34298262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com