栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用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。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/633555.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号