我有JSON内容,在其中深层嵌套,有一个我想提取的数字数组。我不想创建中间结构,因此尝试了以下操作:

... get f
let json = serde_json::from_reader::<_, serde_json::Value>(f)?;
let xs: Vec<(f64, f64)> = serde_json::from_value(json["subtree"][0])?;

这提示
11 | serde_json::from_value(json["subtree"][0])?;
   |                        ^^^^^^^^^^^^^^^^^^^^^ move occurs because value has type `serde_json::value::Value`, which does not implement the `Copy` trait

如果我clone,它可以正常工作:

let xs: Vec<(f64, f64)> = serde_json::from_value(json["subtree"][0].clone())?;

但这似乎没有必要。我将不使用其余的结构。我如何在无需创建中间结构且无需克隆的情况下实现这一目标?

最佳答案

哦,错过了完全显而易见的。

... get f
let mut json = serde_json::from_reader::<_, serde_json::Value>(f)?;
let xs: Vec<(f64, f64)> = serde_json::from_value(json["subtree"][0].take())?;

关于json - 如何在没有中间结构的情况下有效地将JSON的一部分提取为Vec?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57611811/

10-10 15:38