rust使用serde_json转换Value为rust中的数据类型

178 阅读1分钟

为了方便转换未知json数据,我们可以使用serde提供的value类型来进行转换,将json字符串转化为Value值,然后可以快速使用get方法来获取值:

        let json_str = r#"
            {
                "name": "John",
                "age": 30,
                "city": "New York",
                "info": {
                    "work": "code",
                    "phone": 15670339888,
                    "password": "123456"
                }
            }
        "#;
        let map_obj: Value = serde_json::from_str(json_str).expect("Invalid JSON");
        let name = map_obj.get("name");
        println!("name value is:{name:?}");

但是获取到的值依然是Value类型,想要转换为rust中的类型,就可以使用Value类型提供的方法:

类似于类型转换,例如转换为i64类型:

let candidate_num = map_lottery.get("candidate_num").unwrap().as_i64().unwrap();

得到的类型就是i64的。

转换为 as_array,得到的就是&Vec<Value>类型的值: