簡體   English   中英

將JSON對象中的信息提取到Javascript變量中

[英]Extracting info from JSON object into Javascript variable

我有一個來自Google日歷的供稿,該供稿將事件作為JSON對象提供

這是其中一個事件的示例

"entry": [{
        "id": {
            "$t": "https://www.google.com/calendar/feeds/0183mgrcm70ch155q5bq1de9v8%40group.calendar.google.com/public/full/526dopgom77cdg9jmish3se1gk"
        },
        "published": {
            "$t": "2014-09-11T08:17:53.000Z"
        },
        "updated": {
            "$t": "2014-09-11T08:20:57.000Z"
        },
        "category": [{
            "scheme": "http://schemas.google.com/g/2005#kind",
            "term": "http://schemas.google.com/g/2005#event"
        }],
        "title": {
            "$t": "The Village",
            "type": "text"
        },
        "content": {
            "$t": "",
            "type": "text"
        },
        "link": [{
            "rel": "alternate",
            "type": "text/html",
            "href": "https://www.google.com/calendar/event?eid=NTI2ZG9wZ29tNzdjZGc5am1pc2gzc2UxZ2sgMDE4M21ncmNtNzBjaDE1NXE1YnExZGU5djhAZw",
            "title": "alternate"
        }, {
            "rel": "self",
            "type": "application/atom+xml",
            "href": "https://www.google.com/calendar/feeds/0183mgrcm70ch155q5bq1de9v8%40group.calendar.google.com/public/full/526dopgom77cdg9jmish3se1gk"
        }],

這是到目前為止的我的Javascript

function GCalEvents(gcal_json_url) {

    jQuery.getJSON(gcal_json_url, function(data){

        // Parse and render each event
        jQuery.each(data.feed.entry, function(i, item){
            if(i == 0) {
                jQuery("#gcal-events li").first().hide();
            };

            var event_link = item.link.href;

            // event title
            var event_title = item.title.$t;

            // event contents
            var event_contents = jQuery.trim(item.content.$t);
            // make each separate line a new list item
            event_contents = event_contents.replace(/\n/g,"</li><li>");

            // event start date/time
            var event_start_date = new Date(item.gd$when[0].startTime);

            // if event has a start time (as oppose to all day), format date with time
            if(event_start_date.getHours() != 0 || event_start_date.getMinutes() != 0) {
                var event_start_day = event_start_date.toString("d");
                var event_start_month = event_start_date.toString("MMM");
                var event_start_time = event_start_date.toString("h:mm tt");
            } else {
            // otherwise format start as date only (without time)
                var event_start_day = event_start_date.toString("d");
                var event_start_month = event_start_date.toString("MMM");               
            };

            // event location - if not null, surround with parens
            var event_loc = item.gd$where[0].valueString;

            // Render the event
            jQuery("#gcal-events li").last().before(
                "<div id=\"calentry\">"
                + "<ul>"
                + "<a href=\"" + event_link + "\"><li class=\"eldate\"> <span id=\"elmonth\">" + event_start_month + "</span><br><span id=\"elday\">" + event_start_day + "</span><br>" + event_start_time + "</li></a>"
                + "<li><span class=\"elvenue\">" + event_title + "</span><br><span class=\"ellocation\">" + event_loc + "</span></li>"
                + "</ul>"
                + "<div id=\"clearfix\"></div>"
                + "</div>"
            );
        });
    });
}

我已經成功地將信息提取到event_title,event_contents和event_start_date變量中,但是event_link變量不斷出現未定義的狀態(我正在嘗試將URL從“ link:href”獲取到此變量中)

有任何想法嗎?

item.link是一個數組。 使用此特定的JSON,您可以使用例如item.link[0].hrefitem.link[1].href

您的“鏈接”變量是一個數組。 因此,您必須執行以下操作才能訪問值:

var event_link = item.link[0].href; // This gives you this first one

更好的辦法是檢查是否有一個:

var event_link = null;

if (item.link.length > 0)
{
   var event_link = item.link[0].href;
}

以下代碼對您有所幫助。

  var dataObj =  jQuery.parseJSON(data);
  var event_link = null;
  if (dataObj.link.length > 0)
   {
      var event_link = dataObj .link[0].href;
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM