Google 데이터 프로토콜에서 JSON 사용하기

경고: 이 페이지는 Google의 이전 API인 Google Data API에 관한 것으로, Google Data API 디렉터리에 표시된 API 중 상당수가 최신 API로 대체된 API입니다. 특정 새 API에 대한 자세한 내용은 새 API 문서를 참조하세요. 최신 API를 사용하여 요청을 승인하는 방법은 Google 계정 인증 및 승인을 참고하세요.

이 도움말에서는 Google 데이터 프로토콜에서 사용되는 JSON을 다룹니다. 프로토콜에 관한 자세한 내용은 개발자 가이드를 참고하세요.

모든 프로그래밍 언어로 JSON을 사용할 수 있지만 이 문서의 예는 자바스크립트입니다.

JSON 피드 및 XML 피드 정보

Google 데이터 서비스는 다음 규칙을 사용하여 XML 피드를 변환하여 JSON 형식 피드를 만듭니다.

기본

  • 피드는 JSON 객체로 표시됩니다. 중첩된 각 요소나 속성은 객체의 이름/값 속성으로 표현됩니다.
  • 속성은 문자열 속성으로 변환됩니다.
  • 하위 요소는 객체 속성으로 변환됩니다.
  • 두 번 이상 나타날 수 있는 요소는 배열 속성으로 변환됩니다.
  • 태그의 텍스트 값은 $t 속성으로 변환됩니다.

네임스페이스

  • 요소에 네임스페이스 별칭이 있으면 별칭과 요소가 '$'를 사용하여 연결됩니다. 예를 들어 ns:elementns$element가 됩니다.

XML

  • XML 버전과 인코딩 속성은 각각 루트 요소의 버전 및 인코딩 속성으로 변환됩니다.

다음 예는 동일한 피드의 XML 및 JSON 버전을 보여줍니다. 쉽게 비교할 수 있도록 탭으로 구성되어 있습니다.

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 피드 요청 및 사용

Atom은 Google 데이터의 기본 형식입니다. 요청에 alt 매개변수를 지정하지 않으면 Atom 피드가 수신됩니다.

참고: Google 데이터 클라이언트 라이브러리는 현재 JSON을 지원하지 않습니다.

JSON 출력

JSON 형식의 응답을 요청하려면 alt=json 매개변수를 사용합니다.

예를 들어 JSON 형식으로 Google의 개발자 캘린더 피드를 요청하려면 다음 쿼리를 전송합니다.

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

스크립트 내 JSON 출력

스크립트 태그에서 JSON을 래핑하는 응답을 요청하려면 alt=json-in-script 매개변수를 사용하고 callback=functionName 매개변수를 추가하여 콜백 함수를 추가합니다.

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

콜백 함수를 사용하면 일반적인 클라이언트 측 자바스크립트에서 발생할 수 있는 교차 도메인 보안 문제를 해결할 수 있습니다. 일반적으로 잠재적인 보안 허점과 그로 인해 발생할 수 있는 교차 도메인 공격으로 인해 브라우저에서 도메인 간에 파일을 로드할 수 없습니다.

JSON-in-script 형식을 사용하면 클라이언트의 스크립트 태그에 응답을 로드하여 이러한 제한을 해결할 수 있습니다. 즉, 해당 페이지의 자바스크립트 코드에서 다른 위치에 응답을 사용할 수 있습니다. JSON 출력은 페이지가 로드될 때 로드되며 다른 요령은 필요하지 않습니다.

아래의 간단한 작업 애플리케이션에서 이 기법을 보여줍니다.

<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>

샘플

Google Data API에서 JSON을 사용하는 방법의 작업 예는 샘플 페이지를 참고하세요.

추가 리소스

JSON 및 웹 애플리케이션에서 JSON을 사용하는 방법을 자세히 알아볼 수 있는 몇 가지 외부 리소스가 있습니다.

맨 위로