使用Object.keys().length获取REST返回JSON记录数返回undefined
解决JSON对象中获取记录数量返回undefined的问题
嘿,我来帮你捋清楚这个问题!你现在的核心问题是找错了要计算长度的目标层级,直接用Object.keys(json).length算的是整个顶层JSON对象的键数量,而不是你要的rows/records数组里的记录数,而且如果不小心还可能因为JSON没正确解析导致返回undefined。
先给你拆解下问题:
- 你预期的记录数是1,说明你的JSON里肯定有一个数组(比如
rows),里面装着1条记录,但这个数组是嵌套在顶层对象里的。 Object.keys(json).length只会返回顶层对象有多少个键(比如如果顶层是{ "rows": [...] },那这个值是1),但这不是你要的记录数。
正确的解决步骤:
- 先确保JSON已正确解析:如果从接口拿到的是字符串,一定要先用
JSON.parse()转换成JS对象,不然直接操作会出问题。 - 精准定位记录数组:找到存储记录的那个数组对应的键路径,然后直接取数组的
length属性(数组本身就有length,不用Object.keys)。
举个实际例子,假设你的返回JSON是这样的(符合你预期1条记录的情况):
{ "code": 200, "msg": "success", "rows": [ { "id": 1, "name": "测试记录" } ] }
那获取记录数的代码应该是:
// 假设已经把接口返回的JSON字符串解析成了responseObj const recordCount = responseObj.rows.length; console.log(recordCount); // 输出1,就是你要的结果
避坑提醒:
- 键名要完全匹配:JSON的键是大小写敏感的,别把
rows写成Rows或者ROWS,不然会拿到undefined。 - 处理空数据的情况:如果接口可能返回空数组或者没有
rows键,可以用可选链操作符避免报错:const recordCount = responseObj?.rows?.length || 0; - 先确认JSON结构:可以用
console.log(json)把整个对象打出来,看看rows/records到底在哪个层级,别瞎猜路径。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

