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

编写CLI工具时,如何将serde_json Value的键转为camelCase?

处理任意JSON对象键转camelCase的方案

你可以借助serde自带的serde::case模块实现键的大小写转换,同时通过递归遍历serde_json::Value来适配任意结构的JSON,完全不需要强类型定义。

实现步骤

  1. 添加依赖:确保serde启用case特征,同时引入serde_json:
[dependencies]
serde = { version = "1.0", features = ["case"] }
serde_json = "1.0"
  1. 递归转换函数:编写函数遍历JSON结构,对所有对象的键应用camelCase转换,嵌套的对象和数组也会被递归处理:
use serde::case::CamelCase;
use serde_json::Value;

fn convert_keys_to_camel_case(value: &Value) -> Value {
    match value {
        // 处理JSON对象:转换键为camelCase,递归处理值
        Value::Object(obj) => {
            let mut new_obj = serde_json::Map::new();
            for (key, val) in obj {
                let camel_key = CamelCase::convert(key);
                new_obj.insert(camel_key, convert_keys_to_camel_case(val));
            }
            Value::Object(new_obj)
        }
        // 处理JSON数组:递归转换每个元素
        Value::Array(arr) => {
            let new_arr = arr.iter()
                .map(convert_keys_to_camel_case)
                .collect();
            Value::Array(new_arr)
        }
        // 基础类型(字符串、数字、布尔、null)直接返回
        _ => value.clone(),
    }
}
  1. 使用示例:读取JSON文件、转换并输出结果:
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let json_content = std::fs::read_to_string("input.json")?;
    let original_json: Value = serde_json::from_str(&json_content)?;
    
    let camel_case_json = convert_keys_to_camel_case(&original_json);
    println!("{}", serde_json::to_string_pretty(&camel_case_json)?);
    
    Ok(())
}

补充说明

  • serde::case模块已经封装了成熟的大小写转换逻辑,能处理下划线、连字符分隔的键(比如user_name转userName,user-id转userId),无需自己实现转换规则。
  • 如果需要其他格式转换,只需替换CamelCase为对应类型即可,比如SnakeCase、PascalCase等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:20:49