我正在尝试解码这些数据:
{ "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 '' 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, }
A Vec
表示可调整大小的连续数据量.它知道分配了多少空间以及这些分配中有多少是有效的,并且永远不会让您访问无效项.