简体   繁体   English

Javascript错误中未定义的JSON值

[英]undefined JSON values in Javascript error

I am reading through a JSON object, trying to loop through the text and create substrings of the text. 我正在阅读JSON对象,试图遍历文本并创建文本的子字符串。 It is, for some reason coming back as "cannot read property 'roles' of undefined." 由于某种原因,它返回为“无法读取未定义的属性'角色'”。 What am I missing? 我想念什么?

  // 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;
             }

Please see the JSON object in reference below: 请参阅以下参考资料中的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"
  }
]

Change all of your references to 将所有引用更改为

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

to

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

here is the problem: In below snippet code you are looping through the role but in substring you passing obj[t]. 这是问题所在:在下面的代码片段中,您正在遍历角色,但在子字符串中则传递了obj [t]。 As per above given JSON you have only one item in obj however in role you have more than 1 item. 按照上面给定的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 is: 答案是:

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

Hope this will help you :) 希望这个能对您有所帮助 :)

Would be helpful to know, from debugging, which line is throwing the error. 从调试中知道哪个行引发了错误将是有帮助的。 But it's probably this one: 但这可能是这样的:

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

Using t to index obj and tgtLAnguageSentences and roles is problematic based on your JSON object example. 根据您的JSON对象示例,使用t索引objtgtLAnguageSentencesroles是有问题的。 The loop will run 4 times based on t<obj[0].tgtLanguageSentences[0].roles.length . 循环将基于t<obj[0].tgtLanguageSentences[0].roles.length运行4次。

When t = 1, for instance, you are trying to find a value at obj[1].tgtLanguageSentences[1].roles[1] if there is no object at obj[1].tgtLanguageSentences[1] then you will get "cannot read property 'roles' of undefined." 例如,当t = 1时,如果您在obj[1].tgtLanguageSentences[1].roles[1]上没有对象,则尝试在obj[1].tgtLanguageSentences[1].roles[1]上找到一个值。无法读取未定义的属性“角色”。”

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

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