如何{"arr":[1,2,3,4]}在不使用或类似方法执行堆分配的情况下反序列化 JSON serde_json_core?它当前执行一次分配。我看到serde_json_core使用了heapless板条箱,但我不确定如何让它们一起工作。
#[derive(Deserialize)]
struct MyStruct {
arr: Vec<u64>,
}
fn main() {
let j = r#"{"arr":[1,2,3,4]}"#;
let r: serde_json_core::de::Result<(MyStruct, usize)> = serde_json_core::from_str(j);
let (out, _) = r.unwrap();
println!("First value: {}.", out.arr[0]);
}
Run Code Online (Sandbox Code Playgroud)
我在用serde_json_core = 0.4.0。
该serde-json-core包可以将 JSON 数组反序列化为任何实现该Deserialize特征的类型。如果你想避免内存分配,你需要选择一个不分配的容器。
如果预先知道数组的大小,则可以简单地使用固定大小的数组,即[T; N]。如果 JSON 数组的大小不精确,这将返回反序列化错误N。
如果 JSON 数组的大小是可变的且上限已知,则可以使用各种类似向量的堆栈分配数据结构之一。其中一个选项是heapless::Vec,Deserialize如果您启用 的serde功能,它就会实现heapless。在您的Cargo.yaml文件中,您可以这样做:
heapless = { version = "0.7", features = ["serde"] }
Run Code Online (Sandbox Code Playgroud)
如果您使用的版本heapless与您的版本所serde-json-core依赖的版本相同,则它只会包含在您的构建中一次。
| 归档时间: |
|
| 查看次数: |
1064 次 |
| 最近记录: |