[英]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.