Ostrzeżenie: ta strona dotyczy starszych interfejsów API Google – interfejsów API danych Google – dotyczy tylko interfejsów API wymienionych w katalogu interfejsów API danych Google, z których wiele zostało zastąpionych nowszych. Informacje na temat konkretnego nowego interfejsu API można znaleźć w dokumentacji nowego interfejsu API. Informacje o autoryzowaniu żądań za pomocą nowszego interfejsu API znajdziesz w artykule Uwierzytelnianie i autoryzacja kont Google.
W tym artykule opisujemy format JSON używany w protokole Google Data Protocol. Więcej informacji o protokole można znaleźć w przewodniku dla programistów.
Możesz używać kodu JSON z dowolnym językiem programowania, ale przykłady w tym dokumencie są zapisane w języku JavaScript.
Informacje o plikach JSON i plikach XML
Usługa danych Google tworzy plik danych w formacie JSON, konwertując go na podstawie tych reguł:
Podstawowe
- Plik danych jest reprezentowany przez obiekt JSON. Każdy zagnieżdżony element lub atrybut jest reprezentowany jako nazwa/wartość obiektu.
- Atrybuty są konwertowane na właściwości ciągu znaków.
- Elementy podrzędne są konwertowane na właściwości obiektu.
- Elementy, które mogą występować więcej niż raz, są konwertowane na właściwości tablicy.
- Wartości tekstowe tagów są konwertowane na właściwości
$t
.
Przestrzeń nazw
- Jeśli element ma alias przestrzeni nazw, alias i element są łączone za pomocą „$”. Na przykład
ns:element
staje sięns$element
.
XML;
- Wersje XML i atrybuty kodowania są konwertowane odpowiednio do atrybutów wersji i kodowania elementu głównego.
Poniższy przykład przedstawia wersje XML i JSON tego samego pliku danych. Są one podzielone na karty, aby umożliwić łatwe porównanie.
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"}]}, }] } }
Żądanie i używanie plików danych JSON
Atom to domyślny format danych Google. Jeśli w żądaniu nie określisz parametru alt
, otrzymasz kanał Atom.
Uwaga: biblioteki klienta danych Google nie obsługują obecnie plików JSON.
Dane wyjściowe JSON
Aby zażądać odpowiedzi w formacie JSON, użyj parametru alt=json
.
Aby na przykład poprosić Google o udostępnienie pliku danych kalendarza dewelopera w formacie JSON, wyślij to zapytanie:
http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json
Dane wyjściowe JSON-in-script
Aby zażądać odpowiedzi, która opakowuje JSON w tagu skryptu, użyj parametru alt=json-in-script
i dodaj funkcję wywołania zwrotnego, dodając parametr callback=functionName
.
http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json-in-script&callback=myFunction
Używanie funkcji wywołań zwrotnych pozwala uniknąć niektórych problemów z zabezpieczeniami w różnych domenach, które mogą wystąpić podczas wykonywania kodu JavaScript po stronie klienta. Przeglądarki zwykle uniemożliwiają wczytywanie plików w różnych domenach z powodu potencjalnych luk w zabezpieczeniach i ataków międzydomenowych.
Format JSON-in-script pozwala obejść te ograniczenia przez wczytanie odpowiedzi w tagu skryptu w kliencie. Oznacza to, że odpowiedzi możesz użyć w innych miejscach kodu JavaScript na tej stronie. Dane wyjściowe JSON są wczytywane podczas wczytywania strony. Nie potrzeba żadnych innych sztuczek.
Ta prosta aplikacja działająca w ten sposób pokazuje tę 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>
Sample
Przydatne przykłady dotyczące korzystania z kodu JSON za pomocą interfejsów API danych Google znajdziesz na stronie przykłady.
Dodatkowe materiały
Aby dowiedzieć się więcej o korzystaniu z JSONu i korzystaniu z nich w aplikacjach internetowych, możesz zapoznać się z kilkoma zasobami zewnętrznymi.
- JSON.org (w języku angielskim)
- Wpis w Wikipedii dotyczący JSON
- JSON: bezpłatna alternatywa dla XML-a