2015-07-09 68 views
0

我正在通过JSON对象阅读,尝试循环显示文本并创建文本的子字符串。出于某种原因,这是因为“无法读取未定义的属性”角色。“我错过了什么?未定义JavaScript中的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; 
      } 

请参阅JSON对象在下面引用:

[ 
    { 
    "description": "", 
    "roles": [ 
     { 
     "name": "thing commented on" 
     }, 
     { 
     "name": "commentor" 
     } 
    ], 
    "srcLanguageSentence": { 
     "roles": [ 
     { 
      "beginOffset": 23, 
      "endOffset": 30, 
      "name": "thing commented on", 
      "text": "on them" 
     }, 
     { 
      "beginOffset": 5, 
      "endOffset": 7, 
      "name": "commentor", 
      "text": "We" 
     } 
     ], 
     "text": " `` We wo n't comment on them . '' ", 
     "verb": { 
     "beginOffset": 15, 
     "endOffset": 22, 
     "text": "comment" 
     } 
    }, 
    "tgtLanguageSentences": [ 
     { 
     "roles": [ 
      { 
      "beginOffset": 1, 
      "endOffset": 31, 
      "name": "thing commented on", 
      "text": "Weitere Aspekte der Kommission" 
      }, 
      { 
      "beginOffset": 44, 
      "endOffset": 47, 
      "name": "commentor", 
      "text": "ich" 
      }, 
      { 
      "beginOffset": 48, 
      "endOffset": 55, 
      "name": "negation", 
      "text": "nicht ." 
      } 
     ], 
     "text": " Weitere Aspekte der Kommission kommentiere ich nicht . ", 
     "verb": { 
      "beginOffset": -1, 
      "endOffset": -1, 
      "sense": "COMMENT, intransitive", 
      "text": "kommentieren" 
     } 
     } 
    ], 
    "verb": "KOMMENTIEREN" 
    } 
] 
+2

无法读取未定义**的属性'roles'在什么行和位置**? –

+0

'tgtLanguageSentences [t] .roles [t]'?你确定你需要为两个数组使用完全相同的索引?这是...不寻常的... –

+0

在我看来,它应该是'obj [0] .tgtLanguageSentences [0] .roles [t]'。只是猜测基于for循环去'obj [0] .tgtLanguageSentences [0] .roles'的长度。 –

回答

0

更改所有引用到

obj[t].tgtLanguageSentences[t].roles[t]

obj[0].tgtLanguageSentences[0].roles[t]

+0

我忘了提及附加的JSON对象只是一个片段。这是JSON文件中数百个对象的第一个。有什么想法吗? – HumaniTech

0

这里是问题: 在下面的代码段代码中,你正在循环通过角色,但是在你传递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); 

的answere是:

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)); 

希望这将帮助你:)

0

将是有益的知道,从调试,该行引发错误。但是,它可能是这一个:

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)); 

使用t索引objtgtLAnguageSentencesroles是有问题的根据您的JSON对象的实例。循环将根据t<obj[0].tgtLanguageSentences[0].roles.length运行4次。

例如,当t = 1时,如果在obj [1] .tgtLanguageSentences [1]处没有对象,则您试图在obj[1].tgtLanguageSentences[1].roles[1]处找到值,那么您将获得“无法读取未定义的属性'角色'。 “

+0

我忘了提及附加的JSON对象只是一个片段。这是JSON文件中数百个对象的第一个。有什么想法吗? – HumaniTech

+0

你有三个答案和一些意见都指向相同的事情,这不是你需要看看哪一行是在调试器中抛出错误的问题。 – lwalden