【问题标题】:Append data to JSON array issue将数据附加到 JSON 数组问题
【发布时间】:2018-12-20 10:07:01
【问题描述】:

我在尝试将数据推送到具有数组的 JSON 结构中时遇到问题。在下面的代码中,“M”是一个可以相加的数组,x 是一个整数值。我正在尝试使用 push 将多个条目放入数组“P”中,但出现以下错误:

未捕获的类型错误:无法读取未定义的属性“推送”

var x = 3;
var title = "A Title"
var JSON_local_dat = {"M":[{"T":title, "P":[]}]};

for(var i=0; i < x; i++)
{
    var d = {"Something": 50};
    JSON_local_dat.M.P.push(d);
    console.log(JSON.stringify(JSON_local_dat.M.P));
}

我也试过删除双引号,但我得到了同样的错误。 如果我尝试将数据推入“M”,则成功,但不是“P”。 不明白为什么它不应该对我希望数据去往的 P 做同样的事情。

(顺便说一句,我使用单个字母作为名称,因为空间很紧,我用来传递数据的 API 将我限制为 4000 个字符。)

【问题讨论】:

    标签: javascript arrays json append push


    【解决方案1】:

    M 是一个Array。使用M[0] 获取数组中的第一个条目,这里恰好是具有属性P 的对象。

    x = 3;
    var JSON_local_dat = {"M":[{"T":"title", "P":[]}]};
    
    for(var i=0; i < x; i++)
    {
        var d = {"Something": 50};
        JSON_local_dat.M[0].P.push(d);
        console.log(JSON.stringify(JSON_local_dat.M[0].P));
    }

    【讨论】:

    • 谢谢。我想我成了代码盲!现在答案很明显了。
    【解决方案2】:

    PM 数组中第一个对象的属性,而不是M 本身的属性。您需要选择数组的第一项才能访问对象(而不是数组本身)才能访问P

    var x = 3;
    var title = "A Title"
    var JSON_local_dat = {"M":[{"T":title, "P":[]}]};
    
    for(var i=0; i < x; i++)
    {
        var d = {"Something": 50};
        JSON_local_dat.M[0].P.push(d);
    }
    console.log(JSON.stringify(JSON_local_dat.M));

    如果您想提高效率,您可以只选择一次P 数组,而不是每次迭代:

    var x = 3;
    var title = "A Title"
    var P = [];
    var JSON_local_dat = {"M":[{"T":title, P}]};
    
    
    for(var i=0; i < x; i++)
    {
        var d = {"Something": 50};
        P.push(d);
    }
    console.log(JSON.stringify(JSON_local_dat.M));

    另外,你没有 JSON - 你只有一个普通的 Javascript 对象。见There's no such thing as a "JSON Object"

    【讨论】:

      【解决方案3】:

      您的 json (JSON_local_dat) 没有按照您想要的方式构建。您使 M 成为一个数组(它的第一个元素具有 P 属性)。 更改为 -

      var JSON_local_dat = {"M":{"T":title, "P":[]}};
      

      【讨论】:

        【解决方案4】:

        要修复您的代码,请使用 M[0],因为它是一个数组。

        JSON_local_dat.M[0].P.push(d);

        【讨论】:

          猜你喜欢
          • 2021-07-07
          • 1970-01-01
          • 1970-01-01
          • 2017-09-22
          • 2018-05-29
          • 2019-08-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多