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
相关产品推荐
相关产品推荐

