You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中通过serde_json获取JSON对象的所有键?

如何获取serde_json::Value对象中的所有键?

要获取serde_json::Value中的所有键,首先要明确:serde_json::Value是枚举类型,只有当它的变体为Object(对应JSON对象)时才包含键值对。直接调用value.keys()会编译失败,因为编译器无法确定当前Value是否为Object类型。

正确的做法是先通过as_object()方法将Value转换为Option<&Map<String, Value>>,再处理这个可选值:

修改后的完整代码

fn json_hello_world() {
    // 一些JSON输入数据,类型为&str,可能来自用户输入。
    let data = r#"
        {
            "name": "John Doe",
            "age": 43,
            "phones": [
                "+44 1234567",
                "+44 2345678"
            ]
        }"#;

    // 将字符串数据解析为serde_json::Value类型。
    let value: serde_json::Value = serde_json::from_str(data).unwrap();

    println!(
        "Please call {} at the number {}",
        value["name"], value["phones"][0]
    );

    // 正确打印所有键的方式
    if let Some(obj) = value.as_object() {
        for key in obj.keys() {
            println!("{}", key);
        }
    }
}

fn main() {
    json_hello_world();
}

代码说明

  • as_object():检查当前Value是否为Object变体,是则返回内部Map<String, Value>的引用,否则返回None。
  • 用if let做模式匹配,安全处理可选类型,避免空指针错误。
  • 调用obj.keys()即可遍历JSON对象的所有键,输出结果为name、age、phones。

内容的提问来源于stack exchange,提问作者Rahn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:02:46