JavaScript解析JSON:如何遍历D3.D3-00.DATETIME?当前报错NaN
获取JSON中D3.D3-00.DATETIME值的解决方法
问题描述
给定如下JSON数据:
{ "D3": { "D3-00": { "DATETIME": "01-11-2022 17:00:25", "MECHANISM": "", "B2": { "DATETIME": "01-11-2022 00:00:00", "MECHANISM": "Auto" } } } }
需要获取D3.D3-00.DATETIME的值,但操作时出现NaN错误。
解决方法
出现NaN错误的核心原因是:用点语法访问带连字符的键(比如obj.D3.D3-00)时,连字符会被JavaScript解析成减法运算,导致计算错误返回NaN。正确操作如下:
直接获取值(无需遍历)
如果确定键的层级结构,直接用方括号语法访问带特殊字符的键即可:
// 假设JSON已解析为JS对象data const datetime = data.D3["D3-00"].DATETIME; console.log(datetime); // 输出:01-11-2022 17:00:25
遍历层级获取(动态场景)
如果需要动态遍历不确定的层级,可以用循环实现嵌套值获取:
function getNestedValue(obj, keyPath) { let current = obj; for (const key of keyPath) { if (!current || typeof current !== 'object') { return null; // 路径不存在时返回null } current = current[key]; } return current; } // 使用示例 const targetValue = getNestedValue(data, ['D3', 'D3-00', 'DATETIME']); console.log(targetValue); // 输出:01-11-2022 17:00:25
关键注意事项
- 确保JSON已通过
JSON.parse()正确解析为JavaScript对象,直接操作JSON字符串会导致错误。 - 所有带连字符、空格或数字开头的键,都必须用方括号语法访问,不能用点语法。
内容的提问来源于stack exchange,提问作者Aksheet-Goku
相关产品推荐
相关产品推荐

