【问题标题】:Node.js JSON nested array object accessNode.js JSON 嵌套数组对象访问
【发布时间】:2018-02-20 14:06:01
【问题描述】:

我正在构建一个从 SONARQUBE 中的 API 调用获取 JSON 响应的应用程序。

使用 node js 如何从下面的 JSON 对象访问 duplicated_lines 的值。

我尝试了以下但总是不确定。是否有任何库支持探索这些对象?

代码

var subrequest = unirest("GET",queryUrl);

subrequest.end(function (resXX) {
  if (resXX.error);
    for (var key in resXX) { 
      if (resXX.hasOwnProperty(key)) {
        console.log("Checking the id " + resXX[key].msr.duplicated_lines);
      }
    }
});

JSON

[
  {
    "id": 1933853,
    "uuid": "XXXXXXXXXXXXXX",
    "key": "XXXXXXXXXXXX",
    "name": "XXXXXXX",
    "scope": "PRJ",
    "qualifier": "TRK",
    "date": "2018-02-16T08:07:55-0500",
    "creationDate": "2017-09-20T09:50:05-0400",
    "lname": "XXXXXXXX",
    "version": "15",
    "msr": [
      {
        "key": "duplicated_lines",
        "val": 926192,
        "frmt_val": "926,192"
      },
      {
        "key": "bugs",
        "val": 7467,
        "frmt_val": "7,467"
      },
      {
        "key": "ncloc",
        "val": 1369829,
        "frmt_val": "1,369,829"
      },
      {
        "key": "code_smells",
        "val": 22677,
        "frmt_val": "22,677"
      },
      {
        "key": "vulnerabilities",
        "val": 95,
        "frmt_val": "95"
      }
    ]
  }
]

【问题讨论】:

    标签: javascript arrays json node.js express


    【解决方案1】:

    我对您正在访问的 API 一无所知,并且在没有任何其他信息的情况下很难解释您的代码。但是 msr 是一个数组,因此您需要使用索引访问其中的对象:

    resXX[key].msr.forEach(m => {
        if (m.key === 'duplicated_lines') {
            console.log('Checking the id ' + m.val);
        }
    });
    

    【讨论】:

      【解决方案2】:

      我尝试了以下但总是未定义

      因为您在访问时尝试将对象value 用作key

      试试这行代码:

      var duplicateData = jsonObj[0].msr.filter(item => item.key == 'duplicated_lines');
      

      工作演示

      var jsonObj = [
        {
          "id": 1933853,
          "uuid": "XXXXXXXXXXXXXX",
          "key": "XXXXXXXXXXXX",
          "name": "XXXXXXX",
          "scope": "PRJ",
          "qualifier": "TRK",
          "date": "2018-02-16T08:07:55-0500",
          "creationDate": "2017-09-20T09:50:05-0400",
          "lname": "XXXXXXXX",
          "version": "15",
          "msr": [
            {
              "key": "duplicated_lines",
              "val": 926192,
              "frmt_val": "926,192"
            },
            {
              "key": "bugs",
              "val": 7467,
              "frmt_val": "7,467"
            },
            {
              "key": "ncloc",
              "val": 1369829,
              "frmt_val": "1,369,829"
            },
            {
              "key": "code_smells",
              "val": 22677,
              "frmt_val": "22,677"
            },
            {
              "key": "vulnerabilities",
              "val": 95,
              "frmt_val": "95"
            }
          ]
        }
      ];
      
      var duplicateData = jsonObj[0].msr.filter(item => item.key == 'duplicated_lines');
      
      console.log(duplicateData);

      【讨论】:

        【解决方案3】:

        这是一个迭代响应 JSON 数组的单行解决方案

        resXX.forEach(item => item.msr.forEach(v => v['key']==='duplicated_lines' && console.log(`Checking the id ${v['val']}`)))
        

        【讨论】:

          猜你喜欢
          • 2016-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-08
          • 1970-01-01
          • 1970-01-01
          • 2015-08-13
          • 2017-11-27
          相关资源
          最近更新 更多