2015-09-05 209 views
0

所以,与我之前的问题here(我不确定是否提出一个新问题或编辑旧问题)类似,我成功地使用所看到的代码解析了JSON响应body下面。解析JSON数组对象:undefined属性

但是,当试图对event_calendar_date做同样的处理时,我得到这个:Failed with: TypeError: Cannot read property 'und' of undefined。我会假设为了访问数组中的下一个对象,这两个方法都是相同的,但是看起来并非如此。

从服务器

JSON响应:

[ 

    { 
     "revision_uid":"1", 
     "body":{ 
      "und":[ 
       { 
        "value":"Blah Blah.", 
        "summary":"", 
        "format":null, 
        "safe_value":"Blah Blah.", 
        "safe_summary":"" 
       } 
      ] 
     }, 
     "event_calendar_date":{ 
      "und":[ 
       { 
        "value":"2015-07-20 14:00:00", 
        "value2":"2015-07-20 20:00:00", 
        "timezone":"America/New_York", 
        "timezone_db":"America/New_York", 
        "date_type":"datetime" 
       } 
      ] 
     } 
    } 

] 

我的代码:

Parse.Cloud.httpRequest({ 
    method: "GET", 
    url: 'http://www.scolago.com/001/articles/views/articles', 
    success: function(httpResponse) { 
     var data = JSON.parse(httpResponse.text); 
     var articles = new Array(); 
     for (var i = 0; i < data.length; i++) { 
      var Articles = Parse.Object.extend("Articles"), 
       article = new Articles(), 
       content = data[i]; 

      article.set("body", content.body.und[0].value); 
      article.set("vid", content.vid); 
      article.set("title", content.title); 

      article.set("events", content.event_calendar_date.und[0].value); 

      articles.push(article); 
     }; 


     // function save(articles); 
     Parse.Object.saveAll(articles, { 
      success: function(objs) { 
       promise.resolve(); 
      }, 
      error: function(error) { 
       console.log(error); 
       promise.reject(error.message); 
      } 
     }); 

    }, 
    error: function(error) { 
     console.log(error); 
     promise.reject(error.message); 
    } 
}); 
+1

在var数据上做一个console.log,它将在检查器中显示数据的结构,然后您可以看到它的内容。这将帮助您调试问题 – mic

+1

检查我的答案。 –

回答

2

恐怕你没给我们所有的代码,或者你使用的不是你在此发布的代码的问题,因为它应该运行正常,因为你可以看到in this demo

for (var i = 0; i < data.length; i++) { 
    var content = data[i]; 
    console.log(content.event_calendar_date.und[0].value); 
}; 

编辑和解决方案

正如我所料,你得到的JSON没有字段event_calendar_date第二和第三个对象。我检查了您的full code on GitHub.

第一个对象有正确的event_calendar_date字段,但是下一个记录没有。看看你是如何格式化JSON - http://www.jsoneditoronline.org/?id=b46878adcffe92f53f689978873a3474

您需要先检查当前循环迭代中是否存在content.event_calendar_date记录,或将event_calendar_date添加到JSON响应中的所有记录中。

+0

那么[这里](https://github.com/Scolago/CloudCode/blob/master/cloud/main.js)是完整的代码,如果你认为它会有所帮助。但afaik,我发布了所有相关的代码。 – uknj

+1

回答更新了您的真实问题。 –

+0

我不相信我将能够改变JSON响应,那么简单的if语句来检查'content.event_calendar_date'是否适合该任务?谢谢您的帮助。 – uknj