json - 如何在没有中间结构的情况下有效地将 JSON 的一部分提取为 Vec?
问题描述
我有 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())?;
推荐阅读
- javascript - 使用 JavaScript 的成本计算器 - 高级
- javascript - 如何将 Actions 信息传递给组件、React + Redux?
- bash - bash if 语句没有按预期工作
- mule - 如何使用 Mule 4 的默认 amqp 交换发布 amqp 消息
- xml - 我的 xslt 没有显示段落中的换行符
- html - 如何在高度未知的地方垂直和水平设置div?
- sql - 如何使用 Powershell 处理 sql_Variant sql 数据类型
- c++ - 使用 qmake 编译的应用程序如果从控制台编译则不会运行,但如果从 QtCreator 编译则运行
- jquery - JQUERY $(document).click vs $(document).ready
- haskell - 以特定方式展平二叉树