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

如何将含未知顶级键的JSON直接解析为Rust的HashMap<String, String>

直接将动态键JSON解析为HashMap(Rust)

你不需要定义固定结构体来适配所有已知键,serde_json原生支持将这种动态键的JSON对象直接反序列化为HashMap<String, String>,步骤如下:

1. 添加依赖

在Cargo.toml中引入serde和serde_json:

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

2. 实现解析逻辑

直接以HashMap<String, String>作为反序列化目标类型,无需提前声明所有键:

use serde_json::Result;
use std::collections::HashMap;
use std::fs;

// 读取JSON文件并解析为HashMap
fn load_keys() -> Result<HashMap<String, String>> {
    let json_content = fs::read_to_string("your_keys.json")?;
    let key_map: HashMap<String, String> = serde_json::from_str(&json_content)?;
    Ok(key_map)
}

fn main() {
    match load_keys() {
        Ok(keys) => {
            // 示例:遍历输出所有哈希和对应公钥
            for (hash_value, pub_key) in keys {
                println!("哈希: {} | 公钥: {}", hash_value, pub_key);
            }
        }
        Err(err) => eprintln!("解析出错: {}", err),
    }
}

原理说明

serde_json对标准库的HashMap有内置的反序列化支持,只要JSON对象的键和值类型与HashMap的泛型参数匹配(这里JSON的键和值都是字符串,对应String类型),就能自动完成解析。这种方式完全适配动态增减的键,不需要修改源码就能兼容新的键值对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:22:11