You need to enable JavaScript to run this app. Node.js中嵌套JSON对象snake_case键转PascalCase的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中嵌套JSON对象snake_case键转PascalCase的实现问题

snake_case转PascalCase递归转换方案

原有代码问题分析

  • 递归调用后未将子层级转换结果赋值给父对象对应键,导致父子层级关系完全断裂
  • 冗余的ParentComp参数逻辑错误,反而会覆盖正常键的赋值
  • 未处理数组类型边界,原JSON中存在coloring、selection这类数组属性
  • 对null的类型判断错误:typeof null返回值为object,原有逻辑会把null识别为复杂类型错误处理

完整实现代码

首先实现snake_case转PascalCase的工具函数:

function snake2Pascal(str) {
  return str.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('')
}

递归转换函数实现:

function convertKeysToPascalCase(val) {
  // 处理基本类型
  if (val === null || typeof val !== 'object') {
    return val
  }
  // 处理数组类型
  if (Array.isArray(val)) {
    return val.map(item => convertKeysToPascalCase(item))
  }
  // 处理普通对象类型
  const newObj = {}
  for (const [key, value] of Object.entries(val)) {
    const newKey = snake2Pascal(key)
    newObj[newKey] = convertKeysToPascalCase(value)
  }
  return newObj
}

使用示例

传入你提供的JSON对象即可直接转换:

// 你的原始JSON对象
const originObj = {
  perspective_camera: {
    camera_view_point: { 
      x: -2.37,
      y: 26.12, 
      z: 18.97 
    },
    camera_direction: {
      x: 0.5573409184967458,
      y: -0.622517217811208,
      z: -0.5494027794776767
    },
    camera_up_vector: { 
      x: 0.36, 
      y: -0.4, 
      z: 0.83 
    },
    field_of_view: 60
  },
  components: {
    visibility: {
      view_setup_hints: {
        sv: true,
        sb: true,
        ov: true
      },
      exceptions: {},
      default_visibility: true
  },
  coloring: [],
  selection: []
 }
}

// 调用转换
const result = convertKeysToPascalCase(originObj)
console.log(result)

转换后的结果所有键都会变成PascalCase格式,比如perspective_camera转为PerspectiveCamera、camera_view_point转为CameraViewPoint,层级关系完全保留。

内容的提问来源于stack exchange,提问作者assaad el fellah idrissi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 10:18:04