javascript - 如何迭代 json 对象的嵌套属性并创建新的数组列表?

标签 javascript json

我有一个 json 对象“items”,我试图将所有“值”放入一个单独的字符串中:

 "items":[  
      {  
         "id":0,
         "categoryId":0,
         "label":"TOTAL EDUCATION",
         "total":739599,
         "values":[  
            451383,
            288216
         ],
         "items":[  ],
         "metadataIds":"20006",
         "collapsed":true
      },
      {  
         "id":0,
         "categoryId":0,
         "label":"TOTAL HIGHWAYS",
         "total":63678,
         "values":[  
            32672,
            31006
         ],
         "items":[  ],
         "metadataIds":"20022",
         "collapsed":true
      },

for (var i = 0; i < obj.items.length; i++) {
        var cost = obj.items[i].values;
    }

我试图从这些值中实现的输出:

[451383,288216],[32672,31006]等

示例如下:https://jsfiddle.net/zidski/6mg8fszj/

目前我只能输出“值”集中的 1 个。

最佳答案

Currently I can only output 1 of the 'values' set.

嗯,是的;你每次都会覆盖它。

您说过您想要“一个字符串”,并且您显示的输出中包含 [] 。有趣的是,虽然您在迭代时不处理 JSON,但 JSON 可以在生成该字符串中发挥作用:

var str = obj.items.map(function(item) {
    return JSON.stringify(item.values);
}).join(",");

Array#map 循环遍历 items,根据我们从回调中为每个项目返回的内容构建一个新数组;在上面,我们返回每个项目的 values 数组的 JSON 字符串。然后我们用逗号连接结果数组来得到最终的字符串。

示例:

var obj = {
  "items": [{
    "id": 0,
    "categoryId": 0,
    "label": "TOTAL EDUCATION",
    "total": 739599,
    "values": [
      451383,
      288216
    ],
    "items": [],
    "metadataIds": "20006",
    "collapsed": true
  }, {
    "id": 0,
    "categoryId": 0,
    "label": "TOTAL HIGHWAYS",
    "total": 63678,
    "values": [
      32672,
      31006
    ],
    "items": [],
    "metadataIds": "20022",
    "collapsed": true
  }]
};
var str = obj.items.map(function(item) {
        return JSON.stringify(item.values);
    }).join(",");
document.body.innerHTML =
  "<pre>" + str + "</pre>";

如果您实际上并不想要一个字符串,而是想要一个数组的数组,那么这就更简单了:

var arrayOfArrays = obj.items.map(function(item) {
    return item.values;
});

var obj = {
  "items": [{
    "id": 0,
    "categoryId": 0,
    "label": "TOTAL EDUCATION",
    "total": 739599,
    "values": [
      451383,
      288216
    ],
    "items": [],
    "metadataIds": "20006",
    "collapsed": true
  }, {
    "id": 0,
    "categoryId": 0,
    "label": "TOTAL HIGHWAYS",
    "total": 63678,
    "values": [
      32672,
      31006
    ],
    "items": [],
    "metadataIds": "20022",
    "collapsed": true
  }]
};
var arrayOfArrays = obj.items.map(function(item) {
    return item.values;
});
// Just using JSON so we have text to show as a result
document.body.innerHTML =
  "<pre>" + JSON.stringify(arrayOfArrays, null, 2) + "</pre>";

关于javascript - 如何迭代 json 对象的嵌套属性并创建新的数组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716180/

相关文章:

Python json.dumps 将空字符串转换为 null

javascript - Angular 如何重新加载 Controller

javascript - 将 C# Cryptography.Rijndael 加密转换为 Javascript(首选 crypto-js)

javascript - API请求后在JS中访问数据?

java - 在 Jackson 中反序列化可选的可为空字段

java - 如何在android中解析具有多个键的json对象

javascript - 如何在 EXTJS 中添加位于另一个网格面板内的 Ext.window.window 模式

javascript - 如何获取Web浏览器的公钥(用于HTTPS)

java - GWT 和 JSNI 将 Javascript 按钮添加到 HTML 面板中

python - 如何处理有多个json对象的文件并在文件中添加新的json对象?