尝试解析和访问 JSON 对象中的项目
Trying to parse and access the item in a JSON object
我正在尝试解析和访问 JSON 对象中的项目。如何访问 JSON 负载中的 'entity' 数组?
var results = {"id": "92-4dac-4307-9038-c50e829a022a","funa": ["4667"],"entity": [{"id":"98","en": "com","type": "AAF"},{"id":"99","en": "com","type": "AAF"}]};
gs.log(">> raw result: " + results.funa); //output : 4667
var str = JSON.stringify(results);
var parser = new JSONParser();
results = parser.parse(str);
gs.log(" >> after parse mots: " + results.funa); //output : 4667
gs.log(" >> after parse id0: " + results.entity.length); //output : 2
for (var key in results)
gs.log("Key is: " + key + " and value is: " + results.entity[key]); //undefined
您可以使用forEach 方法遍历实体数组。然后,要遍历实体数组中每个元素的属性,可以使用 for (var key in item)
语法。
results.entity.forEach(item => {
for (var key in item) {
gs.log("Key is: " + key + " and value is: " + item[key]);
}
});
我想这就是您要找的。
我不确定我是否理解正确,但你在找这样的东西吗?
var results = {"id": "92-4dac-4307-9038-c50e829a022a","funa": ["4667"],"entity": [{"id":"98","en": "com","type": "AAF"},{"id":"99","en": "com","type": "AAF"}]};
console.log("raw result: " + results.funa); //output : 4667
var str = JSON.stringify(results);
results = JSON.parse(str);
results.entity.forEach(entity => {
Object.keys(entity).forEach(key => {
console.log("Key is: " + key + " and value is: " + entity[key])
})
})
这个问题带有“ServiceNow”标签,none 之前的答案对 ServiceNow 的 Rhino 引擎的细微差别很敏感。 ES6 语法将在任何服务器端脚本中抛出以下错误 Javascript compiler exception: syntax error
。目前(2022年1月)ServiceNow只支持ES5 JavaScript.
您应该使用 ServiceNow 的 JSON 包装器来解析和字符串化您的对象。 JSON 包装器代码存在于名为 JSON
的脚本包含中,您可以仔细阅读。
您可以使用多种 ES5 方法 - 包括 forEach()
方法。因为实体是一个数组,所以我们使用 forEach()
来遍历对象的实体数组。请注意,这只是迭代此数组的几种方法之一。
我已经更新了您的代码片段并添加了评论以反映您问题的答案。
var results = {
"id": "92-4dac-4307-9038-c50e829a022a",
"funa": ["4667"],
"entity": [
{"id":"98","en": "com","type": "AAF"},
{"id":"99","en": "com","type": "AAF"}
]};
gs.info(">> raw result: " + results.funa[0]); // output : 4667
var resultsStr = global.JSON.stringify(results); // Convert result to string
var resultsObj = global.JSON.parse(resultsStr); // Convert resultStr to an object
gs.info(" >> after parse mots: " + resultsObj.funa[0]); // output : 4667
gs.info(" >> after parse id0: " + resultsObj.entity.length); //output : 2
resultsObj.entity.forEach(function(entity) { // Use forEach() to iterate through each obj in the entity array
for (var key in entity) { // Iterate through each key in the current array element
gs.info("Key is: " + key + " and value is: " + entity[key]); // Access entity array element value from the parsed resultsObj
}
});
我正在尝试解析和访问 JSON 对象中的项目。如何访问 JSON 负载中的 'entity' 数组?
var results = {"id": "92-4dac-4307-9038-c50e829a022a","funa": ["4667"],"entity": [{"id":"98","en": "com","type": "AAF"},{"id":"99","en": "com","type": "AAF"}]};
gs.log(">> raw result: " + results.funa); //output : 4667
var str = JSON.stringify(results);
var parser = new JSONParser();
results = parser.parse(str);
gs.log(" >> after parse mots: " + results.funa); //output : 4667
gs.log(" >> after parse id0: " + results.entity.length); //output : 2
for (var key in results)
gs.log("Key is: " + key + " and value is: " + results.entity[key]); //undefined
您可以使用forEach 方法遍历实体数组。然后,要遍历实体数组中每个元素的属性,可以使用 for (var key in item)
语法。
results.entity.forEach(item => {
for (var key in item) {
gs.log("Key is: " + key + " and value is: " + item[key]);
}
});
我想这就是您要找的。
我不确定我是否理解正确,但你在找这样的东西吗?
var results = {"id": "92-4dac-4307-9038-c50e829a022a","funa": ["4667"],"entity": [{"id":"98","en": "com","type": "AAF"},{"id":"99","en": "com","type": "AAF"}]};
console.log("raw result: " + results.funa); //output : 4667
var str = JSON.stringify(results);
results = JSON.parse(str);
results.entity.forEach(entity => {
Object.keys(entity).forEach(key => {
console.log("Key is: " + key + " and value is: " + entity[key])
})
})
这个问题带有“ServiceNow”标签,none 之前的答案对 ServiceNow 的 Rhino 引擎的细微差别很敏感。 ES6 语法将在任何服务器端脚本中抛出以下错误 Javascript compiler exception: syntax error
。目前(2022年1月)ServiceNow只支持ES5 JavaScript.
您应该使用 ServiceNow 的 JSON 包装器来解析和字符串化您的对象。 JSON 包装器代码存在于名为 JSON
的脚本包含中,您可以仔细阅读。
您可以使用多种 ES5 方法 - 包括 forEach()
方法。因为实体是一个数组,所以我们使用 forEach()
来遍历对象的实体数组。请注意,这只是迭代此数组的几种方法之一。
我已经更新了您的代码片段并添加了评论以反映您问题的答案。
var results = {
"id": "92-4dac-4307-9038-c50e829a022a",
"funa": ["4667"],
"entity": [
{"id":"98","en": "com","type": "AAF"},
{"id":"99","en": "com","type": "AAF"}
]};
gs.info(">> raw result: " + results.funa[0]); // output : 4667
var resultsStr = global.JSON.stringify(results); // Convert result to string
var resultsObj = global.JSON.parse(resultsStr); // Convert resultStr to an object
gs.info(" >> after parse mots: " + resultsObj.funa[0]); // output : 4667
gs.info(" >> after parse id0: " + resultsObj.entity.length); //output : 2
resultsObj.entity.forEach(function(entity) { // Use forEach() to iterate through each obj in the entity array
for (var key in entity) { // Iterate through each key in the current array element
gs.info("Key is: " + key + " and value is: " + entity[key]); // Access entity array element value from the parsed resultsObj
}
});