JSON im Google-Datenprotokoll verwenden

Warnung: Diese Seite bezieht sich auf die älteren Google Data APIs. Sie ist nur für die APIs relevant, die im Verzeichnis der Google Data APIs aufgeführt sind. Viele davon wurden durch neuere APIs ersetzt. Informationen zu einer bestimmten neuen API finden Sie in der Dokumentation der neuen API. Informationen zum Autorisieren von Anfragen mit einer neueren API finden Sie unter Authentifizierung und Autorisierung von Google-Konten.

In diesem Artikel geht es um JSON, wie es im Google Data Protocol verwendet wird. Weitere Informationen zum Protokoll finden Sie im Entwicklerhandbuch.

Sie können JSON mit jeder Programmiersprache verwenden. Die Beispiele in diesem Dokument sind jedoch in JavaScript geschrieben.

JSON- und XML-Feeds

Ein Google Data-Dienst erstellt einen JSON-Feed. Dazu konvertiert er ihn anhand der folgenden Regeln:

Basic

  • Der Feed wird als JSON-Objekt und jedes verschachtelte Element oder Attribut als Name/Wert-Property des Objekts dargestellt.
  • Attribute werden in String-Attribute konvertiert.
  • Untergeordnete Elemente werden in Objekteigenschaften konvertiert.
  • Elemente, die mehr als einmal vorkommen können, werden in Array-Properties umgewandelt.
  • Textwerte von Tags werden in $t-Properties umgewandelt.

Namespace

  • Wenn ein Element einen Namespace-Alias hat, werden der Alias und das Element mit „$“ verkettet. Aus ns:element wird beispielsweise ns$element.

XML

  • XML-Versions- und Codierungsattribute werden in Versions- bzw. Codierungsattribute des Stammelements konvertiert.

Das folgende Beispiel zeigt die XML- und JSON-Versionen desselben Feeds. Sie sind mit Tabs versehen, um einen einfachen Vergleich zu ermöglichen.

XML

<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom"
    xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
    xmlns:gd="http://schemas.google.com/g/2005"
    xmlns:gCal="http://schemas.google.com/gCal/2005">
  <id>...</id>
  <updated>2006-11-12T21:25:30.000Z</updated>
  <title type="text">Google Developer Events</title>
  <subtitle type="text">The calendar contains information about upcoming
    developer conferences at which Google will be speaking, along with
    other developer-related events.</subtitle>
  <link rel="http://schemas.google.com/g/2005#feed"
    type="application/atom+xml" href="..." />
  <link rel="self" type="application/atom+xml" href="..." />
  <author>
    <name>Google Developer Calendar</name>
    <email>developer-calendar@google.com</email>
  </author>
  <generator version="1.0"
    uri="http://www.google.com/calendar">Google Calendar</generator>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>25</openSearch:itemsPerPage>
  <gCal:timezone value="America/Los_Angeles" />
    
  <entry>
    <id>...</id>
    <published>2006-11-12T21:25:30.000Z</published>
    <updated>2006-11-12T21:25:30.000Z</updated>
    <category scheme="..." term="..." />
    <title type="text">WebmasterWorld PubCon 2006:
      Google Developer Tools in General</title>
    <content type="text">Google is sponsoring at 
      <a href="http://www.pubcon.com/">WebmasterWorld PubCon 2006</a>. Come and
      visit us at the booth or join us for an evening demo reception where we
      will be talking "5 ways to enhance your website with Google Code". 
      After all, it is Vegas, baby! See you soon.</content>
    <link rel="alternate" type="text/html" href="..." title="alternate" />
    <link rel="self" type="application/atom+xml" href="..." />
    <author>
      <name>Google Developer Calendar</name>
      <email>developer-calendar@google.com</email>
    </author>
    <gCal:sendEventNotifications value="true" />
    <gd:comments>
       <gd:feedLink href="..." />
    </gd:comments>
    <gd:transparency value="..." />
    <gd:eventStatus value="..." />
    <gd:where valueString="3150 Paradise Road, Las Vegas, NV 89109" />
    <gd:when startTime="2006-11-15" endTime="2006-11-17">
      <gd:reminder minutes="10" />
    </gd:when>
  </entry>
  ...
</feed>
    

JSON

{
"version": "1.0", "encoding": "UTF-8", "feed": { "xmlns": "http://www.w3.org/2005/Atom", "xmlns$openSearch": "http://a9.com/-/spec/opensearchrss/1.0/", "xmlns$gd": "http://schemas.google.com/g/2005", "xmlns$gCal": "http://schemas.google.com/gCal/2005", "id": {"$t": "..."}, "updated": {"$t": "2006-11-12T21:25:30.000Z"}, "title": { "type": "text", "$t": "Google Developer Events" }, "subtitle": { "type": "text", "$t": "The calendar contains information about upcoming developer conferences at which Google will be speaking, along with other developer-related events." }, "link": [{ "rel": "...", "type": "application/atom+xml", "href": "..." },{ "rel": "self", "type": "application/atom+xml", "href": "..." }], "author": [{ "name": {"$t": "Google Developer Calendar"}, "email": {"$t": "developer-calendar@google.com"} }], "generator":{ "version": "1.0", "uri": "http://www.google.com/calendar", "$t": "Google Calendar" }, "openSearch$startIndex": {"$t": "1"}, "openSearch$itemsPerPage": {"$t": "25"}, "gCal$timezone": {"value": "America/Los_Angeles"}, "entry": [{ "id": {"$t": "..."}, "published": {"$t": "2006-11-12T21:25:30.000Z"}, "updated": {"$t": "2006-11-12T21:25:30.000Z"}, "category": [{ "scheme": "...", "term": "..." }], "title":{ "type": "text", "$t": "WebmasterWorld PubCon 2006: Google Developer Tools in General" }, "content": { "type": "text", "$t": "Google is sponsoring at <a href="http://www.pubcon.com/">WebmasterWorld PubCon 2006</a>. \nCome and visit us at the booth or join us for an evening demo reception where we will be talking "5 ways to enhance your website with Google Code".\nAfter all,\nit is Vegas, baby! See you soon." }, "link": [{ "rel": "alternate", "type": "text/html", "href": "...", "title": "alternate" },{ "rel": "self", "type": "application/atom+xml", "href": "..." }], "author": [{ "name": {"$t": "Google Developer Calendar"}, "email": {"$t": "developer-calendar@google.com"} }], "gd$transparency": {"value": "http://schemas.google.com/g/2005#event.opaque"}, "gd$eventStatus": {"value": "http://schemas.google.com/g/2005#event.confirmed"}, "gd$comments": {"gd$feedLink": {"href": "..."}}, "gCal$sendEventNotifications": {"value": "true"}, "gd$when": [{ "startTime": "2006-11-15", "endTime": "2006-11-17", "gd$reminder": [{"minutes": "10"}] }], "gd$where": [{"valueString": "3150 Paradise Road,Las Vegas,NV 89109"}]}, }] } }

JSON-Feeds anfordern und verwenden

Atom ist das Standardformat von Google Data. Wenn Sie den Parameter alt nicht in Ihrer Anfrage angeben, erhalten Sie einen Atom-Feed.

Hinweis: Die Google Data-Clientbibliotheken unterstützen derzeit kein JSON.

JSON-Ausgabe

Verwenden Sie den Parameter alt=json, um eine Antwort im JSON-Format anzufordern.

Senden Sie beispielsweise die folgende Abfrage, um den Entwicklerkalender-Feed von Google im JSON-Format anzufordern:

http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json

JSON-in-Skript-Ausgabe

Wenn Sie eine Antwort anfordern möchten, die JSON in einem Skript-Tag umschließt, verwenden Sie den Parameter alt=json-in-script und fügen Sie eine Callback-Funktion hinzu, indem Sie den Parameter callback=functionName hinzufügen.

http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json-in-script&callback=myFunction

Mit Callback-Funktionen können Sie einige der domainübergreifenden Sicherheitsprobleme umgehen, die in clientseitigem JavaScript auftreten. Normalerweise verhindern Browser, dass Dateien aufgrund von potenziellen Sicherheitslücken und domainübergreifenden Angriffen geladen werden können.

Mit dem JSON-im-Skript-Format können Sie diese Einschränkungen umgehen, indem Sie die Antwort in ein Skript-Tag auf dem Client laden. Das bedeutet, dass Sie die Antwort an anderen Stellen in Ihrem JavaScript-Code auf dieser Seite verwenden können. Die JSON-Ausgabe wird beim Laden der Seite geladen. Weitere Tricks sind nicht erforderlich.

Die folgende einfache Arbeitsanwendung veranschaulicht diese Technik:

<h3>Upcoming Google Developer Events</h3>

<div id="agenda"></div>

<script>
  function listEvents(root) {
    var feed = root.feed;
    var entries = feed.entry || [];
    var html = ['<ul>'];

    for (var i = 0; i < entries.length; ++i) {
      var entry = entries[i];
      var title = (entry.title.type == 'html') ? entry.title.$t : escape(entry.title.$t);
      var start = (entry['gd$when']) ? entry['gd$when'][0].startTime : "";	

      html.push('<li>', start, ' ', title, '</li>');
    }

    html.push('</ul>');
    document.getElementById("agenda").innerHTML = html.join("");
  }
</script>

<script src="http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json-in-script&callback=listEvents">
</script>

Beispiele

Beispiele für die Verwendung von JSON mit den Google Data APIs finden Sie auf der Seite Beispiele.

Weitere Informationen

Es gibt mehrere externe Ressourcen, die Sie sich ansehen sollten, um mehr über JSON und die Verwendung von JSON in Webanwendungen zu erfahren.

Nach oben