簡體   English   中英

無法訪問 Javascript 中的 JSON 內的嵌套對象

[英]Not able to access nested objects inside a JSON in Javascript

我正在嘗試在 JSON 文件中提取嵌套對象。 JSON 文件包含有關印度地區的信息,如下所示:- https://api.covid19india.org/state_district_wise.Z466DEEC76ECDF5FCA6D38571F6324D

{
"Haryana": {
    "districtData": {

      "Ambala": {
        "notes": "",
        "active": 2,
        "confirmed": 14,
        "deceased": 1,
        "recovered": 11,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Bhiwani": {
        "notes": "",
        "active": 1,
        "confirmed": 3,
        "deceased": 0,
        "recovered": 2,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Charkhi Dadri": {
        "notes": "",
        "active": 0,
        "confirmed": 1,
        "deceased": 0,
        "recovered": 1,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Faridabad": {
        "notes": "",
        "active": 18,
        "confirmed": 61,
        "deceased": 1,
        "recovered": 42,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Fatehabad": {
        "notes": "",
        "active": 0,
        "confirmed": 1,
        "deceased": 0,
        "recovered": 1,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Gurugram": {
        "notes": "",
        "active": 19,
        "confirmed": 57,
        "deceased": 0,
        "recovered": 38,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      }
    }

"Maharashtra": {
    "districtData": {
      "Other States": {
        "notes": "Cases from other States/UTs",
        "active": 24,
        "confirmed": 27,
        "deceased": 3,
        "recovered": 0,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Ahmednagar": {
        "notes": "",
        "active": 17,
        "confirmed": 42,
        "deceased": 2,
        "recovered": 23,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Akola": {
        "notes": "",
        "active": 30,
        "confirmed": 39,
        "deceased": 1,
        "recovered": 8,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Amravati": {
        "notes": "",
        "active": 17,
        "confirmed": 28,
        "deceased": 7,
        "recovered": 4,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Aurangabad": {
        "notes": "",
        "active": 131,
        "confirmed": 161,
        "deceased": 8,
        "recovered": 22,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Bhandara": {
        "notes": "",
        "active": 1,
        "confirmed": 1,
        "deceased": 0,
        "recovered": 0,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Beed": {
        "notes": "",
        "active": 0,
        "confirmed": 1,
        "deceased": 0,
        "recovered": 1,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Buldhana": {
        "notes": "Reconciled as per MH bulleting 24/04",
        "active": 1,
        "confirmed": 21,
        "deceased": 1,
        "recovered": 19,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      },
      "Chandrapur": {
        "notes": "",
        "active": 1,
        "confirmed": 3,
        "deceased": 0,
        "recovered": 2,
        "delta": {
          "confirmed": 0,
          "deceased": 0,
          "recovered": 0
        }
      }
   }
}

以上信息表示嵌套在 state 對象中的地區數據對象(這里的地區相當於一個城市)。 例如,哈里亞納邦是 state,而安巴拉是哈里亞納邦的一個地區。 所以有多個州,每個 state 里面有多個區。 我想訪問區域內的活動已故對象並創建印度所有區域對象的數組,其中包含有關所有區域的信息,如下所示:-

[
  {
   "active":
   "deceased":
   "recovered":
   "districtname":"District-A"
   "statename":
  },
  {
   "active":
   "deceased":
   "recovered":
   "districtname":"District-B"
   "statename":
  },
  {
   "active":
   "deceased":
   "recovered":
   "districtname":"District-C"
   "statename":
  },
  {
   "active":
   "deceased":
   "recovered":
   "districtname":"District-D"
   "statename":
  }
]

我嘗試了for...in方法,還嘗試將內部對象轉換為數組,但無法在內部正確循環。 誰能建議怎么做?

這是循環對象的一種方法,但我不確定它是否是最有效的方法。

 const obj = { "a": { "b":{ "b1":1, "b2":2, }, "c":{ "c1":3, "c2":4, } } } for(let key in obj){ let val = obj[key] for(let k in val){ let v = val[k] for (let k2 in v){ console.log(k2, v[k2]) } } }

我創建了以下示例。 它將創建一個對象數組,其中包含 state 名稱、區域名稱、活動鍵和增量值。

我正在使用 object.entries ,它返回包含鍵值對的 arrays 數組。 本質上是一個元組數組。 我將它與 object 解構和擴展運算符結合起來。

 const transformFlat = (obj) => { const result = []; Object.entries(obj).forEach(([stateName, { districtData }]) => Object.entries(districtData).forEach(([districtName, { active, delta }]) => result.push({ state: stateName, district: districtName, active, ...delta, }) ) ); return result; }; console.log(transformFlat({ Haryana: { districtData: { Ambala: { notes: '', active: 2, confirmed: 14, deceased: 1, recovered: 11, delta: { confirmed: 0, deceased: 0, recovered: 0, }, }, Bhiwani: { notes: '', active: 1, confirmed: 3, deceased: 0, recovered: 2, delta: { confirmed: 0, deceased: 0, recovered: 0, }, }, }, }, Maharashtra: { districtData: { 'Other States': { notes: 'Cases from other States/UTs', active: 24, confirmed: 27, deceased: 3, recovered: 0, delta: { confirmed: 0, deceased: 0, recovered: 0, }, }, 'Ahmednagar': { notes: '', active: 17, confirmed: 42, deceased: 2, recovered: 23, delta: { confirmed: 0, deceased: 0, recovered: 0, }, }, }, }, }))

嘗試使用帶有Object.values() for循環

for (let value of Object.values(obj)) {
  console.log(value);
}

obj是您的數據。

暫無
暫無

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

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