Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用java脚本解析JSON数据_Javascript_Json_Parsing - Fatal编程技术网

Javascript 用java脚本解析JSON数据

Javascript 用java脚本解析JSON数据,javascript,json,parsing,Javascript,Json,Parsing,我使用GooglePlus API并从中获取数据,在解析此JSON数据时出错 这是我用来解析这些数据的代码,当数据对象被测试并且工作正常时,我会得到错误信息,并保持数据在过去两幅图像中的显示 var allIems = data.items; for (var element in allIems) { document.getElementById('datafromapi').innerHTML += (" , published time :" + element.publ

我使用GooglePlus API并从中获取数据,在解析此JSON数据时出错

这是我用来解析这些数据的代码,当数据对象被测试并且工作正常时,我会得到错误信息,并保持数据在过去两幅图像中的显示

var allIems = data.items;
for (var element in allIems) {
  document.getElementById('datafromapi').innerHTML +=
    (" , published time :" + element.published +
      " , last updated time :" + element.updated +
      ", complete url : " + element.url

    );
  var obj = element.object.attachments;

  document.getElementById('datafromapi').innerHTML +=
    (+"\nattachments of post :\n" +
      " type : " +
      obj[0].objectType +
      " ,displayName of content : " +
      obj[0].displayName +
      " ,content URL  : " +
      obj[0].url +
      " ,content data :" +
      obj[0].image.url +
      " ,content type : " +
      obj[0].image.type +
      " ,content height : " +
      obj[0].image.height +
      " ,content width : " +
      obj[0].image.width +
      "\n\n\n");


}
});
我发现了那个错误

未捕获的TypeError:无法读取未定义的属性“附件”


Javascript有一个内置的JSON解析器,您可以使用它接收数据字符串并返回一个对象

let jsonDataAsString = "{\"a\":1,\"b\":2}";

let jsonDataAsObject = JSON.parse(jsonDataAsString);
然后可以作为对象遍历数据,使用点表示法引用属性

console.log(jsonDataAsObject.a); // 1
为了安全起见,您应该在尝试使用之前将属性与null进行比较

if(jsonDataAsObject.somePropery != null) {
    // the property exists so you can access it here
}

元素
中的值

for (var element in allIems) {
所有项的键,在本例中是数组索引。您必须处理实际的数组项,如下所示:

var obj = allItems[element].object.attachments;
您的代码
element.object.attachments尝试访问不存在的数字的属性
对象

因为我们知道
allItems
是一个数组,所以您可以编写:

for (var i = 0; i < allIems.length; i++) {
  var obj = allItems[i].object.attachments;
for(变量i=0;i
此错误是因为并非所有
元素都包含
对象
属性。错误出现在附件属性NOT object上,并且所有元素都有objectattribute@ahmedkhattab错误表明
元素.object
未定义。由于它未定义,因此没有任何属性。@ahmedkhattab他是对的,
oObject
属性未定义。@ahmedkhattab检查
allIems
数组中的第一项。您可能想先检查属性是否未定义,因为它可以定义并设置为null(完全有效)@SCUNLIFE就我所用过的而言null==未定义,只要你是我们!=你应该很好。不过如果你是喜欢使用===的人,那么是的,在尝试访问属性之前,你需要更仔细地检查