Javascript错误中未定义的JSON值
我正在阅读一个JSON对象,试图循环遍历文本并创建文本的子字符串。出于某种原因,它返回为“无法读取未定义的属性‘角色’”。我缺少什么Javascript错误中未定义的JSON值,javascript,json,Javascript,Json,我正在阅读一个JSON对象,试图循环遍历文本并创建文本的子字符串。出于某种原因,它返回为“无法读取未定义的属性‘角色’”。我缺少什么 // target language text var text1 = obj[0].tgtLanguageSentences[0].text; var strArry1 = []; var colorArr1 = ["DarkSalmon", "ForestGreen", "Brown"]; for(var t=0; t<obj[0].tgtL
// target language text
var text1 = obj[0].tgtLanguageSentences[0].text;
var strArry1 = [];
var colorArr1 = ["DarkSalmon", "ForestGreen", "Brown"];
for(var t=0; t<obj[0].tgtLanguageSentences[0].roles.length; t++)
{
// create variables representing substrings of the Source language Sentence
var tgt1 = text1.substring((obj[t].tgtLanguageSentences[t].roles[t].beginOffset - obj[t].tgtLanguageSentences[t].roles[t].beginOffset),(obj[t].tgtLanguageSentences[t].roles[t].beginOffset - 1));
var tgt2 = text1.substring(obj[t].tgtLanguageSentences[t].roles[t].beginOffset,obj[t].tgtLanguageSentences[t].roles[t].endOffset);
var tgt3 =
text1.substring(obj[t].tgtLanguageSentences[t].roles[t].endOffset,obj[t].tgtLanguageSentences[t].text.length);
strArry.push('<h4>'+tgt1+'</h4>');
strArry.push('<h4>'+'<font color="'+colorArr1[i]+'">"'+tgt2+'</font>'+'</h4>');
if(i == obj[0].tgtLanguageSentences[0].roles[0].length-1)
{
strArry.push('<h4>'+tgt3+'</h4>');
}
text1 = s3;
}
将所有引用更改为
obj[t].tgt语言句子[t].roles[t]
到
obj[0].tgt语言句子[0].roles[t]
问题是:
在下面的代码片段中,您在角色之间循环,但在子字符串中,您要传递obj[t]。
根据上面给出的JSON,您在obj中只有一项,但在角色中,您有不止一项
for(var t=0; t<obj[0].tgtLanguageSentences[0].roles.length; t++)
{
// create variables representing substrings of the Source language Sentence
var tgt1 = text1.substring((obj[t].tgtLanguageSentences[t].roles[t].beginOffset - obj[t].tgtLanguageSentences[t].roles[t].beginOffset),(obj[t].tgtLanguageSentences[t].roles[t].beginOffset - 1));
var tgt2 = text1.substring(obj[t].tgtLanguageSentences[t].roles[t].beginOffset,obj[t].tgtLanguageSentences[t].roles[t].endOffset);
var tgt3 =
text1.substring(obj[t].tgtLanguageSentences[t].roles[t].endOffset,obj[t].tgtLanguageSentences[t].text.length);
希望这将对您有所帮助:)将有助于从调试中了解哪一行抛出了错误。但可能是这个:
var tgt1 = text1.substring((obj[t].tgtLanguageSentences[t].roles[t].beginOffset - obj[t].tgtLanguageSentences[t].roles[t].beginOffset),(obj[t].tgtLanguageSentences[t].roles[t].beginOffset - 1));
根据JSON对象示例,使用
t
索引obj
和tgt语言句子
和角色
是有问题的。循环将根据t无法读取未定义的的属性roles
在哪一行和位置运行4次?tgt语言句子[t]。角色[t]
?您确定需要对两个数组使用完全相同的索引吗?那是。。。不同寻常……在我看来,它应该是obj[0].tgt语言句子[0].roles[t]
。根据for循环猜测obj[0]的长度。tgt语言句子[0]。角色
@DevinH。是的,把它作为一个答案发布。我忘了提到附加的JSON对象只是一个片段。这是JSON文件中数百个对象中的第一个。有什么想法吗?我忘了提到附加的JSON对象只是一个片段。这是JSON文件中数百个对象中的第一个。有什么想法吗?你有三个答案和一些注释都指向同一个东西,这不是你需要看哪一行在调试器中抛出错误的问题。
var tgt1 = text1.substring((obj[0].tgtLanguageSentences[0].roles[t].beginOffset - obj[0].tgtLanguageSentences[0].roles[t].beginOffset),(obj[0].tgtLanguageSentences[0].roles[t].beginOffset - 1));
var tgt1 = text1.substring((obj[t].tgtLanguageSentences[t].roles[t].beginOffset - obj[t].tgtLanguageSentences[t].roles[t].beginOffset),(obj[t].tgtLanguageSentences[t].roles[t].beginOffset - 1));