尝试解析和访问 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 
        }
    });