如何统计JSON指定键的键值对数量及识别子元素根节点
核心问题纠正
你之前调用Object.keys('__metadata')是错误的——这里传的是键名的字符串,而不是__metadata对应的对象值。字符串的length是字符数,所以'__metadata'返回10,和子键数量无关。必须传入对象本身才能统计它的子键。
1. 正确统计子键数量
针对示例中的JSON结构,先从results数组取出目标对象:
const item = yourData.results[0]; // yourData是你的完整JSON数据
- 统计
__metadata的子键数量:const metaSubKeyCount = Object.keys(item.__metadata).length; console.log(metaSubKeyCount); // 输出3,对应id、uri、type三个子键 - 判断
Ebeln这类叶子节点:Ebeln的值是字符串(基本类型),没有子键,可通过类型判断:const isEbelnLeaf = typeof item.Ebeln !== 'object' || item.Ebeln === null; // 若为true,说明它是叶子节点,对应1个键值对
2. 判断ItemToEkbeNav是否为子元素根节点
要确认它是子元素的根节点,需满足两个条件:
- 它的值是非null的对象
- 它包含至少一个子键
代码实现:
const isItemToEkbeNavRoot = typeof item.ItemToEkbeNav === 'object' && item.ItemToEkbeNav !== null && Object.keys(item.ItemToEkbeNav).length > 0; console.log(isItemToEkbeNavRoot); // 示例中返回true,说明它是__deferred的根节点
关键总结
- 永远区分键名(字符串)和键对应的对象值,
Object.keys()的参数必须是对象/数组,不能是键名字符串。 - 用
typeof判断值类型:基本类型(string/number/boolean等)是叶子节点;非null的对象/数组类型,若包含子键,则是子元素的根节点。 - 若遇到数组类型,额外用
Array.isArray()判断即可。
内容的提问来源于stack exchange,提问作者Priyanka Mishra
相关产品推荐
相关产品推荐

