删除 json 文件中没有结构的嵌套属性

Den*_*nis 5 json rust

假设我有一个很大的 JSON 文件。我的目标是删除该 JSON 中的嵌套字段并写入一个新文件。


use serde_json::Value;
use serde_json::Map;

fn main() {
    let data = r#"{
                    "name": "John Doe",
                    "age": 43,
                    "nested":{
                        "to.be.removed": [
                          "+44 1234567",
                          "+44 2345678"
                        ],
                        "other": "important fields"

                    }
                  }"#;

    let mut map :Map<String, Value> =serde_json::from_str(data).expect("failed to read file");
    // how do i remove  "to.be.removed"?


}
Run Code Online (Sandbox Code Playgroud)

操场

我不知道如何删除这样的嵌套属性。

由于 json 非常复杂,我必须坚持使用 Map,因为我对结构不感兴趣。获取嵌套的值会呈现出一个Value. 我只想将值更改为地图,然后像这样插入 map.insert(String::from("nested"), nested);

E_n*_*ate 10

最直接的方法是使用JSON 值类型 API遍历根 JSON 对象的子元素,直到到达要删除或插入的项目。

let data = r#"{
    "name": "John Doe",
    "age": 43,
    "nested":{
        "to.be.removed": [
          "+44 1234567",
          "+44 2345678"
        ],
        "other": "important fields"

    }
}"#;
let mut map: Map<String, Value> = serde_json::from_str(data)
    .expect("failed to read file");

// get to the nested object "nested"
let nested = map.get_mut("nested")
    .expect("should exist")
    .as_object_mut()
    .expect("should be an object");

// now remove the child from there
nested.remove("to.be.removed");
Run Code Online (Sandbox Code Playgroud)

操场