繁体   English   中英

在JSON中访问数组

[英]Accessing arrays in JSON

我觉得必须要问这个问题,但对于我的一生,我找不到它。 我有一组用于按比赛数据进行足球比赛的对象。 数组实际上是对象之一。 每个对象都封装足球比赛中任何给定比赛中发生的所有数据。 这是我的JSON对象:

var playsToAdd = {
    "play":
    [
     {"quarter":""},
     {"drive":""},
     {"down":""},
     {"fieldPos":""},
     {"yardsToGo":""},
     {"yardsGained":""},
     {"playType":""},
     {"playResult":""},
     {"ballSide":""},
     {"oForm":""},
     {"dForm":""},
     {"scoreFSU":""},
     {"scoreOp":""},
     {"playSide":""},
     {"addToDB":""},
     {"players":
      [
       {"name":""},
       {"position":""}
      ]
     }
    ]
   };

这是我尝试向对象添加数据的地方

for(l=0;l<plays.length;l++)
   {
    playsToAdd.play[l].quarter=plays[l].quarter;
    playsToAdd.play[l].drive=plays[l].drive;
    playsToAdd.play[l].down=plays[l].down;
    playsToAdd.play[l].fieldPos=plays[l].fieldPos;
    playsToAdd.play[l].yardsToGo=plays[l].yardsToGo;
    playsToAdd.play[l].yardsGained=plays[l].yardsGained;
    playsToAdd.play[l].playType=plays[l].playType;
    playsToAdd.play[l].playResult=plays[l].playResult;
    playsToAdd.play[l].ballSide=plays[l].ballSide;
    playsToAdd.play[l].oForm=plays[l].oForm;
    playsToAdd.play[l].dForm=plays[l].dForm;
    playsToAdd.play[l].scoreFSU=plays[l].scoreFSU;
    playsToAdd.play[l].scoreOp=plays[l].scoreOp;
    playsToAdd.play[l].playSide=plays[l].playSide;
    playsToAdd.play[l].addToDB=plays[l].addToDB;
    for(m=0;m<plays[l].players.length;m++)
    {
     //playsToAdd[l].players[m].position=plays[l].players[m][1];
     //playsToAdd[l].players[m].name=plays[l].players[m][0];
     playsToAdd.play[l].players[m].name="test";
    }
   }

一切正常,直到我接触到球员为止。 实际上,我注释掉了我的对象以确保这不是问题。 我收到一个错误, Unable to get value of the property '0': object is null or undefined关于playsToAdd.play[l].players[m].name="test"; Unable to get value of the property '0': object is null or undefined playsToAdd.play[l].players[m].name="test"; 我浏览了这个网站和其他网站,但没有发现任何有关我的问题的信息。 任何帮助是极大的赞赏

问题是,现在,您的playsToAdd是一个对象数组,每个对象包含一个属性,即四分之一,驱动器等。

相反,它应该是一个对象数组,其中每个对象都包含播放的所有属性,即四分之一,驱动器等。

您的JSON结构应类似于:

var playsToAdd = {
    "play":
    [
     {
       "quarter":"",
       "drive":"",
       "down":"",
       "fieldPos":"",
       "yardsToGo":"",
       "yardsGained":"",
       "playType":"",
       "playResult":"",
       "ballSide":"",
       "oForm":"",
       "dForm":"",
       "scoreFSU":"",
       "scoreOp":"",
       "playSide":"",
       "addToDB":"",
       "players":
      [
       {"name":"", "position":""},
       {"name":"", "position":""},
       ...
      ]
     }
    ]
   };

这样,您可以像访问/设置数据一样:

playsToAdd.play[x].quarter = 'xyz';

playsToAdd.play[x].players[y].name = 'xyz';

等等

运行该循环时,尚未定义playsToAdd.play[l].players

如果您要创建对象的副本,则可以复制它:

playsToAdd = plays.slice(0);

这将创建plays数组的精确副本。 就是说,我不确定嵌套数组是否被复制或引用。 如果您对此有疑问,请告诉我,我们将为您提供进一步的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM