簡體   English   中英

Node.js JSON嵌套數組對象訪問

[英]Node.js JSON nested array object access

我正在構建一個應用程序,該應用程序從SONARQUBE中的API調用獲取GETS JSON響應。

使用節點js,如何從下面的JSON對象訪問重復的行的值。

我嘗試了以下內容,但始終無法定義。 有沒有支持探索這些對象的庫?

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"
      }
    ]
  }
]

我對您正在訪問的API一無所知,在缺少任何其他信息的情況下,您的代碼很難解釋。 但是,msr是一個數組,因此您需要使用索引訪問其中的對象:

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

我嘗試了以下內容,但始終無法定義

因為您試圖在訪問時將對象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); 

這是迭代響應JSON數組的單行解決方案

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM