我在处理和编写JSON对象等方面还比较陌生,我有这个任务可以根据用户输入动态创建JSON对象。我已经设法在1级创建对象,但是我想在对象内嵌套对象,这是所需的输出

// desired output

masterObj = [
  {
    "Market1": {
      "Size1": {
        "id": 1,
        "reporting_label": "a",
        ...
      },
      "Size2": {
        "id": 2,
        "reporting_label": "a",
        ...
      },
      "Size3": {
        "id": 3,
        "reporting_label": "a",
        ...
      },
      "Size4": {
        "id": 4,
        "reporting_label": "a",
        ...
      },
      "Size5": {
        "id": 5,
        "reporting_label": "a",
        ...
      }
    },
    "Market2": {...},
    "Market3": {...},
    "Market4": {...}

  }
]


我试图在我的masterObj上使用push函数,然后在for循环中针对每个市场将所需的对象推入masterObj的子级中。但是我所能做的就是让所有对象都处于同一级别(即9个对象),现在开始绕圈转以尝试解决此问题...

var masterObj = [{

}];

var requested = [
  {
    "Markets": {
      // boolean values defined by checkboxes
      "Market1": show_m1, "Market2": show_m2, "Market3": show_m3, "Market4": show_m4
      },
    "Sizes": {
      // boolean values defined by checkboxes
      "Size1": show_s1, "Size2": show_s2, "Size3": show_s3, "Size4": show_s4, "Size5": show_s5
    }
  }
]

for (var item of requested) {

  if(item.Markets.Market1 === true ) {
    var m1Obj = {Market1: {}}
    masterObj.push(m1Obj);

    if(item.Sizes.Size1 === true) {
      var s1Obj = {
        Size1: {}
      }
      masterObj.push(s1Obj);
    }
    if(item.Sizes.Size2 === true) {
      var s2Obj = {
        Size2: {}
      }
      sgObj.push(s2Obj);
    }
    if(item.Sizes.Size3 === true) {
      var s3Obj = {
        Size3: {}
      }
      sgObj.push(s3Obj);
    }
    if(item.Sizes.Size4 === true) {
      var s4Obj = {
        Size4: {}
      }
      masterObj.push(s4Obj);
    }
    if(item.Sizes.Size5 === true) {
      var s5Obj = {
        Size5: {}
      }
      masterObj.push(s5Obj);
    }
  }

  if(item.Markets.Market2 === true ) {
    var m2Obj = {
      Market2: {}
    }
    // ouput each requested size
    masterObj.push(m2Obj);
  }
  if(item.Markets.Market3 === true ) {
    var m3Obj = {
      Market3: {}
    }
    // ouput each requested size
    masterObj.push(m3Obj);
  }
  if(item.Markets.Market4 === true ) {
    var m4Obj = {
      Market4: {}
    }
    // ouput each requested size
    masterObj.push(m4Obj);
  }
}

console.log(masterObj);


在这方面的任何帮助都将是惊人的。在我的脑海中,我相信我已经接近解决方案,但此刻它在逃避我!

最佳答案

推送不起作用,因为您的对象具有一个元素组成的数组..这是object而不是array

masterObj = [ { ... } ]


您更可能想拥有这种构造:

masterObj =   {
    "Market1": {
      "Size1": {
        "id": 1,
        "reporting_label": "a",
        ...
      },
      "Size2": {
        "id": 2,
        "reporting_label": "a",
        ...
      },
      "Size3": {
        "id": 3,
        "reporting_label": "a",
        ...
      },
      "Size4": {
        "id": 4,
        "reporting_label": "a",
        ...
      },
      "Size5": {
        "id": 5,
        "reporting_label": "a",
        ...
      }
    },
    "Market2": {...},
    "Market3": {...},
    "Market4": {...}

  }


然后您可以使用

masterObj.Market7 = {...};


或者,如果您需要通过变量进行访问:

key = 'Market7';
masterObj[key] = {...};


编辑:注意:JSONS与此问题无关。您正在处理直线对象和数组。 JSON仅在将该对象序列化/反序列化为字符串时适用-通常用于存储或传输。

07-24 09:51
查看更多