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

如何实现与Python类似的Rust结构体与集合字面量定义?

Rust集合初始化问题解答

简洁嵌套字面量的功能规划

原生嵌套列表、Map字面量语法目前没有纳入Rust短期的功能迭代路线图。
官方团队没有推进该特性的核心原因和Shepmaster的猜测一致:Rust标准库提供了面向不同场景的多种集合实现(比如BTreeMap、HashMap,不同的集合在排序、性能、内存占用上的特性差异很大),如果为某一种集合提供语法层面的字面量支持,相当于官方默认倾向某一种实现,反而会误导开发者忽略场景差异选择不合适的结构。
目前Rust 1.56及以上版本已经支持HashMap::from([(k1, v1), (k2, v2)])的初始化写法,相比更早版本需要逐个调用insert的写法已经简化了很多,社区也有第三方宏可以实现更接近字面量的初始化体验。

从JSON字符串初始化嵌套集合的实现方法

你贴出的代码报错是因为标准库的HashMap没有实现从String直接转换的特性,需要借助第三方JSON处理库实现该需求,目前最常用的方案是搭配serde和serde_json库实现:

  1. 首先在Cargo.toml中添加依赖:
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
  1. 示例实现代码:
use serde_json::Value;
use std::collections::HashMap;

fn main() {
    // 使用Rust原生的原始字符串语法,r#""#包裹的内容不需要转义内部的双引号,完全避免引号转义问题
    let json_str = r#"{"Venus": 0.7, "Mars": 1.5, "Mercury": 0.4, "Earth": 1.0}"#;
    
    // 可以直接解析为serde_json::Value类型,天然支持任意层级的嵌套数组、Map结构
    let json_val: Value = serde_json::from_str(json_str).unwrap();
    println!("解析后的JSON值:{:?}", json_val);

    // 也可以直接解析为指定类型的HashMap
    let solar_distance: HashMap<String, f64> = serde_json::from_str(json_str).unwrap();
    println!("转换后的HashMap:{:?}", solar_distance);
}

如果需要解析自定义的强类型结构,只需要给对应结构体添加#[derive(Deserialize)]注解,即可直接从JSON字符串完成解析,不需要手动处理嵌套结构的转换逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:36:02