亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何遍歷復雜的 Json 對象并對每個等于某個值的屬性執行某些操作

如何遍歷復雜的 Json 對象并對每個等于某個值的屬性執行某些操作

慕哥9229398 2021-06-04 14:47:43
我遇到了以下問題,我需要遍歷一個大的 Json 對象(子節點由數組、字符串和對象組成,就嵌套屬性而言,深度至少為 4-5 層)。在大 Json 文件的某些部分有一個特定的對象結構,它有一個名為“erpCode”的屬性。我需要掃描 Json 并找到具有該屬性的所有對象,取值使用該代碼向不同的 API 詢問詳細信息,一旦我獲得詳細信息,將它們插入到具有當前“erpCode”的對象中。只是為了澄清,在我的情況下,Json 中的父節點屬性名稱始終等于與 erpCode 屬性位于同一“級別”的“typeSysname”字段中的值。一個簡單的例子:{   "cars": [    {      "name": "X222",      "carType": {         "erpCode": "skoda",         "value": null,         "typeSysName": "carType"       }    }    ],    "model": {       "year": 1999,       "details": {           "erpCode": "112"           "value": null,           "typeSysName": "details"        }      } }在此示例中,我需要找到 2 個屬性,從中獲取值 skoda 和 112,并從不同的 API 獲取值和描述數據,并將其設置到此 Json 中的正確位置。PS 有沒有一個好的 npm 包可以幫助我解決這個問題?
查看完整描述

3 回答

?
九州編程

TA貢獻1785條經驗 獲得超4個贊

mb 類似的東西;


function processObject(jsonData) {

    for (prop in jsonData) {

        if (jsonData.hasOwnProperty(prop)) {

            // We get our prop

            if (prop === 'code') {

                let codeValue = jsonData[prop]

                doSomeAsync(codeValue)

                    .then(response => {

                        jsonData[prop] = response;

                    })

            }

            let curValue = jsonData[prop];

            if (Array.isArray(curValue)) {

                // Loop through the array, if array element is an object, call processObject recursively.

                processArray(curValue);

            } else if (typeof curValue === 'object') {

                processObject(curValue);

            }

        }

    }

}


查看完整回答
反對 回復 2021-06-11
?
MM們

TA貢獻1886條經驗 獲得超2個贊

我以 Aravindh 的答案為起點,并設法達成了一個看似完整的解決方案。我會在這里分享,


async function convertErpCodes(jsonData, orgName, parentPropertyName){    

        for (let prop in jsonData) {

          if (jsonData.hasOwnProperty(prop)) {

              if (prop === 'erpCode') {

                  const erpCodeValue = jsonData[prop]

                  const req = {"query": {"erpCode": erpCodeValue, "orgName": orgName, "typeSysName": parentPropertyName}};

                  const result = await viewLookupErpService.findOne(req);

                  if(result)

                    return result; 

              }

              const curValue = jsonData[prop];

              if (Array.isArray(curValue)) {

                  for(let i in curValue){

                    const res = await convertErpCodes(curValue[i], orgName, prop);

                  }

              } else if (curValue && typeof curValue === 'object') {

                const response = await convertErpCodes(curValue, orgName, prop);

                if(response){

                    jsonData[prop] = response;

                }

              }

          }

      }

}

PS 我只有在從第三方 API 得到響應時才設置這些值(這是遞歸中結果和響應邏輯的原因。


查看完整回答
反對 回復 2021-06-11
  • 3 回答
  • 0 關注
  • 299 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號