Javascript 试图访问此JSON属性,但我的方法不起作用(提供了JSON对象的屏幕截图)

Javascript 试图访问此JSON属性,但我的方法不起作用(提供了JSON对象的屏幕截图),javascript,json,for-loop,Javascript,Json,For Loop,为了简单起见,为了让我们的生活更轻松,我刚刚拍摄了JSON对象的屏幕截图,如下所示: 现在,我正在尝试访问1的文本值。我使用这段代码,我可以访问其他属性:值对,比如0下的标题 entireJSON.TEI.text.body.div.forEach(function(entry) { entry.p.forEach(function(dp) { var dateCurr = dp.title; // this works fine } } 但出错的地方是当我尝试以下代码

为了简单起见,为了让我们的生活更轻松,我刚刚拍摄了JSON对象的屏幕截图,如下所示:

现在,我正在尝试访问1的文本值。我使用这段代码,我可以访问其他属性:值对,比如0下的标题

entireJSON.TEI.text.body.div.forEach(function(entry) {
   entry.p.forEach(function(dp) {
      var dateCurr = dp.title; // this works fine
   }
}
但出错的地方是当我尝试以下代码时(我也尝试过其他变体)。我试过很多不同的语法,但我就是不懂。如何访问1下的属性:value(_text:text的值)


我会尝试使用条件,因为第一个索引
p[0]
在屏幕截图中没有
persName
的属性,并且会抛出一个错误,如
无法到达每个未定义的属性

entireJSON.TEI.text.body.div.forEach(function(entry) {
   entry.p.forEach(function(dp) {
      var dateCurr = dp.title; // this works fine

       // if it's an array
       if (Object.prototype.toString.call(dp.persName) === '[object Array]') {
           dp.persName.forEach(function(test) { // DOESN'T WORK
             console.log(test.__text); //DOESNT'T WORK
           });
       } else {
           // everything else
           console.log(dp.persName);
       }
   });
});

如果你只是想支持现代浏览器,你仍然可以使用
Array.isArray

哇,我觉得自己太笨了。我发誓我试过了,但我想我没有。成功了。非常感谢。实际上,对于您发布的内部if语句,我得到了“uncaughttypeerror:undefined不是函数”。它可以遍历大多数名称,但会在某一点停止。@AnthonyJ如果它对前几个名称有效,那么数组中较远的
persName
可能不是数组。你能给我看更多的数据吗?或者,如果您不介意跳过任何非数组的内容,您可以将条件更改为
Array.isArray(dp.persName)
Wow。。。你说得对。在我尝试这段代码之前,我没有注意到persName不再是数组。问题是,我需要persName的所有内容,无论它是否是数组。我遇到这个问题是因为我使用了一个名为x2js的JS库,它将XML转换为JSON。因此,我正在讨论的所有JSON都已转换为XML。我将对数组中的人名使用条件语句,对非数组使用else语句,看看我是否能用这种方式处理它们。@AnthonyJ我已将代码更新为
console.log
如果不是数组,则使用其他语句。应该一直工作到你碰到一个物体,然后你就必须找出一些东西,因为我不知道数据的结构。
entireJSON.TEI.text.body.div.forEach(function(entry) {
   entry.p.forEach(function(dp) {
      var dateCurr = dp.title; // this works fine

       // if it's an array
       if (Object.prototype.toString.call(dp.persName) === '[object Array]') {
           dp.persName.forEach(function(test) { // DOESN'T WORK
             console.log(test.__text); //DOESNT'T WORK
           });
       } else {
           // everything else
           console.log(dp.persName);
       }
   });
});