You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计JSON指定键的键值对数量及识别子元素根节点

解决方法:判断__metadata和ItemToEkbeNav是否为子键根元素

核心问题纠正

你之前调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:23:34