簡體   English   中英

節點:如何重組獲取的嵌套JSON數據並組織可重用的數據?

[英]Node: How to restructure nested JSON data getting and organize reusable?

使用Node請求模塊,我通過URL獲取JSON數據。 JSON文件嵌套在多個級別中,並且沒有以可重復使用的方式進行組織。 當前的JSON如下所示:

{
  "data": {
    "series": {
      "brochure_image": "range.jpg",
      "background_image": "range.jpg",
      "Model 1": {
        "medium_images": "Model_1.png",
        "brand": "Tesla",
        "Model 101": {
          "medium_images": "Model_101.png",
          "brochure_image": "Model_101.png",
        },
        "Model 102": {
          "medium_images": "Model_102.png",
          "brochure_image": "Model_102.png",
        }
      },
      "Model 2": {
        "medium_images": "Model_2.png",
        "brand": "Tesla",
        "Model 201": {
          "medium_images": "Model_201.png",
          "brochure_image": "Model_201.png",
        }
      }
    }
  }
}

我想進行重組,以便可以輕松地從前端訪問數據。 我想這樣改變:

[
  {
    "series":"Model 1",
    "model": [
      {
        "modelName": "Model 101",
        "medium_images": "Model_101.png",
        "brochure_image": "Model_101.png"
      },
      {
        "modelName": "Model 102",
        "medium_images": "Model_102.png",
        "brochure_image": "Model_102.png"
      }
    ] 
  }
  {
    "series":"Model 2",
    "model": [
      {
        "modelName": "Model 201",
        "medium_images": "Model_101.png",
        "brochure_image": "Model_101.png"
      }
    ] 
  }
]

我怎樣才能做到這一點? 我的節點server.js參與如下:

const dataUrl = "http://example.com/data/series-data.json";

// API
app.get("/api/getSeriesData", (req, res) => {
    request.get(dataUrl, (error, response, body) => {
        var json = JSON.parse(body);
        var seriesObj = json.data.series;
        var seriesArr = [];

        for (var series in seriesObj) {

            if (seriesObj.hasOwnProperty(series)) {
                seriesArr.push({"series": series, "model": seriesObj[series]});
            }
        }
        res.send(seriesArr);
    });
});

您可以執行以下操作:

 var obj = { "data": { "series": { "brochure_image": "range.jpg", "background_image": "range.jpg", "Model 1": { "medium_images": "Model_1.png", "brand": "Tesla", "Model 101": { "medium_images": "Model_101.png", "brochure_image": "Model_101.png", }, "Model 102": { "medium_images": "Model_102.png", "brochure_image": "Model_102.png", } }, "Model 2": { "medium_images": "Model_2.png", "brand": "Tesla", "Model 201": { "medium_images": "Model_201.png", "brochure_image": "Model_201.png", } } } } }; var result = []; Object.keys(obj.data.series).forEach(key => { if(key.indexOf("Model") === 0){ var o = {series: key, model:[]}; Object.keys(obj.data.series[key]).forEach(k => { if(k.indexOf("Model") === 0){ o.model.push({modelName: k, medium_image: obj.data.series[key][k].medium_image, brochure_image: obj.data.series[key][k].brochure_image}); } }); result.push(o); } }); console.log(result); 

這樣做是循環遍歷.data.seriesdata.series[MODEL NAME]所有屬性,並且僅考慮那些屬性名稱以Model開頭的值。 如果並非所有您感興趣的值的屬性名稱都以Model開頭,則此方法將行不通。 在這些情況下,您可能必須使用否定斷言(檢查其屬性名稱是否不是您不感興趣的已知名稱之一)。

這是我的解決方案。

我們可以刪除對象中不需要的keys ,然后遍歷對象屬性並將其添加到數組中。

請仔細閱讀摘要,如果您遇到任何問題或疑問,請告訴我。

 var data = { "data": { "series": { "brochure_image": "range.jpg", "background_image": "range.jpg", "Model 1": { "medium_images": "Model_1.png", "brand": "Tesla", "Model 101": { "medium_images": "Model_101.png", "brochure_image": "Model_101.png", }, "Model 102": { "medium_images": "Model_102.png", "brochure_image": "Model_102.png", } }, "Model 2": { "medium_images": "Model_2.png", "brand": "Tesla", "Model 201": { "medium_images": "Model_201.png", "brochure_image": "Model_201.png", } } } } }; var output = []; delete data.data.series.brochure_image delete data.data.series.background_image for (k in data.data.series) { var temp = []; delete data.data.series[k].medium_images; delete data.data.series[k].brand; for (j in data.data.series[k]) { temp.push({ modelName: j, medium_images: data.data.series[k][j].medium_images, brochure_image: data.data.series[k][j].brochure_image }); } output.push({ "series": k, model: temp }); } console.log(output); 
  .as-console { height: 100%; } .as-console-wrapper { max-height: 100% !important; top: 0; } 

暫無
暫無

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

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