使用serde_json解析时是否可以展平子对象字段?

使用serde_json解析时是否可以展平子对象字段?,第1张

使用serde_json解析时是否可以展平子对象字段?

没有使用属性的内置方法,但是您可以

Deserialize
为自己的
Object
类型编写自己的impl,该类型会先反序列化为中间的辅助表示形式,然后将数据重新排列为所需的结构。

#[macro_use]extern crate serde_derive;extern crate serde;extern crate serde_json;use serde::{Deserialize, Deserializer};#[derive(Debug)]struct Object {    name: String,    count: i32,    foo: String,}impl<'de> Deserialize<'de> for Object {    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>        where D: Deserializer<'de>    {        #[derive(Deserialize)]        struct Outer { name: String, info: Inner,        }        #[derive(Deserialize)]        struct Inner { count: i32, foo: String,        }        let helper = Outer::deserialize(deserializer)?;        Ok(Object { name: helper.name, count: helper.info.count, foo: helper.info.foo,        })    }}fn main() {    let j = r#"{      "name": "myobject",      "info": {        "count": 3,        "foo": "bar"      }    }"#;    println!("{:#?}", serde_json::from_str::<Object>(j).unwrap());}

输出为:

Object {    name: "myobject",    count: 3,    foo: "bar"}

在三个明显不同的地方出现了很少的嵌套

  1. 邻近其他领域
  2. 本身在最高层
  3. 本身低于顶层

这三个要求不同的方法。在此问题中观察到#1。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5639426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存