在Nashorn jjs脚本中高效通用地从JSON获取子元素集合
嘿,作为JavaScript新手能主动琢磨更通用的实现方式,这点特别赞!针对你在Nashorn jjs脚本环境里的需求,我整理了几个实用又易理解的方案,帮你轻松获取[childA, childB]这类子元素集合:
方法1:用
Object.values()一键提取(最简洁通用) 如果你的JSON解析后是类似这样的对象结构:
// 假设已经完成JSON解析,得到这个对象 const parsedData = { parentNode: { childA: "element1", childB: "element2", childC: "element3" } };
那直接用Object.values()就能快速拿到所有子元素的数组,完全不用关心子元素的键名是什么:
const childCollection = Object.values(parsedData.parentNode); console.log(childCollection); // 输出 ["element1", "element2", "element3"]
Nashorn在Java 8及以上版本完全支持Object.values(),适配jjs环境毫无问题。
方法2:手动遍历收集(适合理解底层逻辑)
要是你想更清楚地理解对象遍历的原理,或者需要兼容极个别特殊环境,也可以手动遍历对象的键来收集子元素:
const parsedData = { parentNode: { childA: "element1", childB: "element2" } }; const childCollection = []; // 遍历父节点下的所有键 for (const key in parsedData.parentNode) { // 只收集对象自身的属性,避免拿到继承的原型属性 if (parsedData.parentNode.hasOwnProperty(key)) { childCollection.push(parsedData.parentNode[key]); } } console.log(childCollection); // 输出 ["element1", "element2"]
这种方法更基础,新手学起来也能加深对JS对象的理解。
方法3:筛选特定规则的子元素(灵活适配特殊需求)
如果你的需求不是提取所有子元素,而是只收集键名符合特定规则的(比如都以child开头),可以结合过滤和映射来实现:
const parsedData = { parentNode: { childA: "element1", childB: "element2", otherItem: "不需要的元素" } }; // 先拿到键值对,过滤出符合规则的,再提取值 const childCollection = Object.entries(parsedData.parentNode) .filter(([key]) => key.startsWith("child")) .map(([_, value]) => value); console.log(childCollection); // 输出 ["element1", "element2"]
这个方法灵活性拉满,能应对各种有筛选条件的场景。
额外注意(针对Nashorn jjs环境)
jjs本质是Java提供的JavaScript引擎,语法上和标准ES5/ES6大部分兼容,上面的代码都能直接运行。如果你的JSON结构嵌套更深,只要调整对象的访问路径(比如parsedData.level1.level2)就可以啦。
内容的提问来源于stack exchange,提问作者blekione
相关产品推荐
相关产品推荐

