Javascript错误中未定义的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

我正在阅读一个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].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));