<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JSON &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/json/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Mon, 09 Dec 2013 01:39:36 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>&#034;JSON&#034; &#8211; Alphabetical Advent Calendar 2013</title>
		<link>https://blog.mach3.jp/2013/12/09/jaac2013-j-json.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 09 Dec 2013 01:39:36 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Advent Calendar 2013]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[XML]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3705</guid>

					<description><![CDATA[&#8220;J&#8221; は JSON の &#8220;J&#8221;。 JSON JSON は &#8220;JavaScript Object Notation&#8221; の略称で、 今や息をするように [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>&#8220;J&#8221; は JSON の &#8220;J&#8221;。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-9E0KuvqEZT4/UqR4icv8cKI/AAAAAAAACYg/N2xSaWsMPwU/s400/ac2013-j.png9" alt="J"/></figure>



<p></p>



<span id="more-3705"></span>



<h2 class="wp-block-heading">JSON</h2>



<p>JSON は &#8220;JavaScript Object Notation&#8221; の略称で、 今や息をするように当たり前のように使われているデータフォーマットです。</p>



<ul class="wp-block-list">
<li>サイズが少なくて済む</li>



<li>書式に馴染みがある（JavaScriptのオブジェクトリテラルほぼそのまま）</li>



<li>データの型をそのまま活かせる</li>
</ul>



<p>などの特徴を持ち、Webアプリケーションのデータのやり取りだけでなく、 node.js のパッケージ定義ファイル（package.json）や、 Sublime Text 2 等ソフトウェアの設定ファイル等、様々な場面で目にするようになりました。</p>



<h3 class="wp-block-heading">生成・パース</h3>



<p>JSON文字列の生成・展開は <strong>JSON</strong> オブジェクトの <strong>stringify</strong> / <strong>parse</strong> メソッドを通して行うことが出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> person = {
    <span class="hljs-attr">name</span>: <span class="hljs-string">"john"</span>,
    <span class="hljs-attr">age</span>: <span class="hljs-number">15</span>,
    <span class="hljs-attr">active</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">tags</span>: &#91;<span class="hljs-string">"JavaScript"</span>, <span class="hljs-string">"CSS"</span>, <span class="hljs-string">"HTML"</span>]
};

<span class="hljs-keyword">var</span> json = <span class="hljs-built_in">JSON</span>.stringify(person);
<span class="hljs-comment">// '{"name":"john","age":15,"active":true,"tags":&#91;"JavaScript","CSS","HTML"]}'</span>
<span class="hljs-keyword">var</span> parsed = <span class="hljs-built_in">JSON</span>.parse(json);
<span class="hljs-comment">// { name: "john", ... }</span>
</code></span></pre>


<p>JSON APIは古いブラウザ等では使えない場合もありますが、 その場合は <a href="https://github.com/douglascrockford/JSON-js">json2.js</a> などを利用する事で、 レガシーな環境でも <strong>JSON.parse/stringify</strong> を使用出来るようになります。 あるいは、パースするだけならば jQuery に <strong>$.parseJSON</strong> メソッドが用意されています。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$.parseJSON(<span class="hljs-string">'{"name":"john","age":15,"active":true,"tags":&#91;"JavaScript","CSS","HTML"]}'</span>);
</code></span></pre>


<h3 class="wp-block-heading">型 と toJSON メソッド</h3>



<p>型を活かせるとは言っても全てがそうなのではなく、JSONで表現できる型は限られています。 JSONはあくまでJSONであって、JavaScriptではないという事ですね。</p>



<p>表現できる型は以下となります。</p>



<ul class="wp-block-list">
<li>数値</li>



<li>文字列</li>



<li>真偽値</li>



<li>配列</li>



<li>オブジェクト（連想配列）</li>



<li>null</li>
</ul>



<p>それ以外の型については、Date オブジェクトのように <strong>toJSON</strong> メソッドを持つ物であればその結果が代入されます。 （Date.toJSON は ISO文字列を返します） ただし、パース時に元のオブジェクトに変換してくれたりはしません。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> data = {
    <span class="hljs-attr">date</span>: <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>()
};
<span class="hljs-built_in">JSON</span>.stringify(date); <span class="hljs-comment">// {"date":"2013-11-11T03:46:11.583Z"}</span>
</code></span></pre>


<p>つまり、<strong>toJSON</strong> メソッドを定義してさえ置けば、そのままJSONに渡せてしまうという事です。 backbone.js の Model や Collection には toJSON メソッドが実装されており、そのままスムーズにデータのやり取りをする事が出来ます。 自前のクラス等をつくる際には toJSON を生やしておくと色々捗りそうです。</p>



<h2 class="wp-block-heading">JSONPath</h2>



<p>全く違う話になりますが、XMLのデータの必要な情報にだけアクセスする <strong>XPath</strong> という物があります。 XML文書あるいはそのデータから <strong>&#8220;//chapter[@title=&#8221;第1章&#8221;]/paragraph&#8221;</strong> のような文字列表現で条件を指定することで、 条件に適合するデータを抽出するという物なのですが、 JSON にも同じ趣向のライブラリがあります。それが <strong>JSONPath</strong> です。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong><a href="http://goessner.net/articles/JsonPath">http://goessner.net/articles/JsonPath</a></strong><br />
  JSONPath is a lightweight component that allows to find and extract relevant portions out of JSON structures on the client as well as on the server.</p>
</blockquote>



<p>JavaScriptの実装は、90行程度に収まっています。 簡単な例で試してみましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> data = {
    <span class="hljs-attr">length</span>: <span class="hljs-number">3</span>,
    <span class="hljs-attr">items</span>: &#91;
        {
            <span class="hljs-attr">name</span>: <span class="hljs-string">"JavaScript 第6版"</span>,
            <span class="hljs-attr">price</span>: <span class="hljs-number">4410</span>,
            <span class="hljs-attr">author</span>: <span class="hljs-string">"David Flanagan"</span>
        },
        {
            <span class="hljs-attr">name</span>: <span class="hljs-string">"JavaScript: The Good Parts"</span>,
            <span class="hljs-attr">price</span>: <span class="hljs-number">1890</span>,
            <span class="hljs-attr">author</span>: <span class="hljs-string">"Douglas Crockford"</span>
        },
        {
            <span class="hljs-attr">name</span>: <span class="hljs-string">"JavaScriptパターン"</span>,
            <span class="hljs-attr">price</span>: <span class="hljs-number">2940</span>,
            <span class="hljs-attr">author</span>: <span class="hljs-string">"Stoyan Stefanov"</span>
        }
    ]
};

<span class="hljs-comment">// price が2000超の本の著者を抽出する</span>
<span class="hljs-keyword">var</span> authors = jsonPath(data, <span class="hljs-string">"$.items&#91;?(@.price&gt;2000)].author"</span>);
<span class="hljs-comment">// &#91;"David Flanagan", "Stoyan Stefanov"]</span>
</code></span></pre>


<p>&#8220;$&#8221; がルートを示し、そこから &#8220;.&#8221; で下層を辿っていき、&#8221;?&#8221; を使って属性でフィルタをかけたりする事ができます。 &#8220;@&#8221; は自身のノードを指します。 詳しい書式については <a href="http://goessner.net/articles/JsonPath">参考ページ</a> にXPathとの対応表として掲載されています。</p>



<p>慣れないと時間がかかりそうですが、大きなデータからの抽出に役立つかもしれません。</p>



<h2 class="wp-block-heading">参考資料</h2>



<ul class="wp-block-list">
<li><a href="http://json.org/json-ja.html">JSON</a></li>



<li><a href="https://github.com/douglascrockford/JSON-js">douglascrockford/JSON-js</a></li>



<li><a href="http://api.jquery.com/jQuery.parseJSON/">jQuery.parseJSON() | jQuery API Documentation</a></li>



<li><a href="http://goessner.net/articles/JsonPath/">JSONPath &#8211; XPath for JSON</a></li>



<li><a href="https://code.google.com/p/jsonpath/">jsonpath &#8211; XPath like syntax for JSON &#8211; Google Project Hosting</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>GoogleスプレッドシートをJSONPで利用する（後編）</title>
		<link>https://blog.mach3.jp/2012/03/09/get-spreadsheet-as-json-02.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 09 Mar 2012 09:37:51 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[JSONP]]></category>
		<category><![CDATA[Spreadsheet]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2313</guid>

					<description><![CDATA[『GoogleスプレッドシートをJSONPで利用する（前編）』の続きです。 一連の処理をまとめてみたスクリプトを紹介します。 書いてみたもの SpreadSheetLoader mach3/js-spreadsheetl [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>『<a href="/2012/03/get-spreadsheet-as-json.html">GoogleスプレッドシートをJSONPで利用する（前編）</a>』の続きです。<br />
一連の処理をまとめてみたスクリプトを紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-wdd_L9degVk/T1IymJTfKtI/AAAAAAAABdk/YZrFvGpXApA/s400/201203032357.png" alt="GoogleスプレッドシートをJSONPで利用する（後編）"/></figure>



<p></p>



<span id="more-2313"></span>



<h2 class="wp-block-heading">書いてみたもの</h2>



<h3 class="wp-block-heading">SpreadSheetLoader</h3>



<p><a href="https://github.com/mach3/js-spreadsheetloader">mach3/js-spreadsheetloader via GitHub</a></p>



<ul class="wp-block-list">
<li>スプレッドシートのJSONを読み込みます</li>



<li>読み込んだデータを整理します</li>



<li>jQuery 1.7+ が必要です</li>
</ul>



<h2 class="wp-block-heading">簡単な使い方</h2>



<h3 class="wp-block-heading">1. URLを取得</h3>



<p>まず<a href="">前編</a>の記事を参考にしてURLを取得してきましょう。<br />
形式は「Atom」または「RSS」の、「セル」を選択してください。<br />
こんな感じのURLですね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://spreadsheets.google.com/feeds/cells/**********/***/public/basic
</div></figure>
</blockquote>



<h3 class="wp-block-heading">2. 読み込む</h3>



<p>まずはインスタンスを初期化し、URLを渡し、読み込みます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// 1. インスタンス初期化</span>
<span class="hljs-keyword">var</span> myloader = <span class="hljs-keyword">new</span> SpreadSheetLoader( &#91;your_url] );

<span class="hljs-comment">// 2. readyイベントハンドラを登録</span>
myloader.on(<span class="hljs-string">"ready"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">var</span> data = <span class="hljs-keyword">this</span>.getData();
});

<span class="hljs-comment">// 3. load()</span>
myloader.load();
</code></span></pre>


<ol class="wp-block-list">
<li>コンストラクタの引数にURLを渡して初期化します。<br /><br />URLは後から<em>setUrl()</em>で渡すことも出来ます。</li>



<li><em>on()</em>で<em>ready</em>イベントへのハンドラを設定します。<br /><br /><em>ready</em>イベントは、スプレッドシートが読み込まれ、データが整理された時点で発火します。</li>



<li><em>load()</em>で読み込み開始</li>
</ol>



<h3 class="wp-block-heading">3. データを利用する</h3>



<p>readyイベントハンドラの中では、自由にデータを利用する事ができます。<br />
あとは煮るなり焼くなり。<br />
データの利用の仕方は…</p>



<h2 class="wp-block-heading">データを取得する</h2>



<p>整理されたデータを取得して利用する為には、幾つかの方法が用意されています。</p>



<dl>
<dt>getData() : Array</dt>
<dd>データがまるごと配列で返されます。</dd>
</dl>



<pre class="wp-block-preformatted">myloader.on("ready", function(){
    var data = this.getData();
    console.log(data[3]); // 4番目のデータ
});
</pre>



<dl>
<dt>getItem(condition) : Array</dt>
<dd>条件に合うデータのみを配列で返します。<br />
条件はオブジェクトで渡します。</dd>
</dl>



<pre class="wp-block-preformatted">myloader.on("ready", function(){
    var myItems = this.getItem({color:"red", price:800}); // 色がredで、価格が800の物を抽出
});
</pre>



<dl>
<dt>each(callback)</dt>
<dd>データに対して繰り返し処理を行います。（中身はjQuery.fn.eachです）</dd>
</dl>



<pre class="wp-block-preformatted">myloader.on("ready", function(){
    var total = 0;
    this.each(function(){
      total += this.price;
    });
    console.log( "Total price:", total ); // 全データのpriceの合計
});
</pre>



<h2 class="wp-block-heading">試してみる</h2>



<h3 class="wp-block-heading">ソース</h3>



<p>例えば、<a href="https://docs.google.com/spreadsheet/ccc?key=0Ark6jIWYcmkLdEIyTURIVTAwdTM2Z00wUkpfY2hyRlE#gid=0">こんな表</a>を読み込んでみます。</p>



<p><iframe width="500" height="200" frameborder="0" src="https://docs.google.com/spreadsheet/pub?key=0Ark6jIWYcmkLdEIyTURIVTAwdTM2Z00wUkpfY2hyRlE&amp;output=html&amp;widget=true"></iframe></p>



<h3 class="wp-block-heading">デモ</h3>



<p><iframe width="100%" height="300" src="http://jsfiddle.net/rCj9B/1/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>前記事の通り、使える場面というのはわりと限られてそうではありますが、<br />
何かの折に使ってみようかなと思っております。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>GoogleスプレッドシートをJSONPで利用する（前編）</title>
		<link>https://blog.mach3.jp/2012/03/07/get-spreadsheet-as-json.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 07 Mar 2012 09:52:12 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Spreadsheet]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2286</guid>

					<description><![CDATA[以前Yahoo! pipesで似たような事をやりましたが、 どうやらGoogleスプレッドシートそのものがJSON出力に対応していたので、 それをJSから利用してみようという試みです。 URLの取得 現在の「新しいスプレ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>以前<a href="/2011/02/cms-with-yahoopipes.html">Yahoo! pipesで似たような事をやりました</a>が、<br />
どうやらGoogleスプレッドシートそのものがJSON出力に対応していたので、<br />
それをJSから利用してみようという試みです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-wdd_L9degVk/T1IymJTfKtI/AAAAAAAABdk/YZrFvGpXApA/s400/201203032357.png" alt="GoogleスプレッドシートをJSONPで利用する（前編）"/></figure>



<p></p>



<span id="more-2286"></span>



<ol class="wp-block-list">
<li>URLの取得</li>



<li>「リスト」と「セル」</li>



<li>JSONPしてみる</li>



<li>どんな時に使えそうか</li>



<li>デメリットなど</li>



<li>後半へ</li>
</ol>



<h2 class="wp-block-heading">URLの取得</h2>



<p class="caution">
現在の「新しいスプレッドシート」では「公開データのリンクを取得」のUIがありませんが、APIは一応整備されていてJSONPでも利用できます。<br />
URL: <strong>https://spreadsheets.google.com/feeds/list/[A]/[B]/public/basic?alt=json</strong><br />
[A]にはスプレッドシートID、[B]にはワークシートIDが入ります。
</p>



<p>まずは対象となるスプレッドシートをJSONで出力する事からスタート。<br />
現時点でJSONは選択肢には出てこないので、ちょっと自分で書き換える必要があります。</p>



<ol class="wp-block-list">
<li>「ファイル」→「ウェブに一般公開」→「公開開始」で公開する。</li>



<li>「公開データへのリンクを取得 」で「RSS」を選択する。</li>



<li>末尾の「alt=rss」を「alt=<em>json</em>」に変更してコピー。</li>
</ol>



<p>コピーしたらアドレスバーに入力して内容をチェックしてみましょう。</p>



<h2 class="wp-block-heading">「リスト」と「セル」</h2>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-eJTAufGfAmM/T1IymLL0dLI/AAAAAAAABdk/KCozZR85UCA/s500/201203040001.png" alt="「リスト」と「セル」"/></figure>



<p></p>



<p>「公開データへのリンクを取得」では、<em>「リスト」</em>と<em>「セル」</em>というラジオボタンがありますが、<br />
これはデータ出力の方法を設定する物です。</p>



<dl>
<dt>「リスト」</dt>
<dd>データの1カラム目をタイトルとし、行を一つのコンテンツとして出力。</dd>
<dt>「セル」</dt>
<dd>内容を含むセルを全て順番に出力していきます。</dd>
</dl>



<h3 class="wp-block-heading">例</h3>



<p>例えば、次のようなテーブルの場合。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>id</th><th>name</th><th>content</th></tr></thead><tbody><tr><td>1</td><td>hoge</td><td>this is hoge</td></tr></tbody></table></figure>



<p>「リスト」の場合は次のように出力されます。<br />
行ごとに「entry」がある感じですね。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">{
    <span class="hljs-string">"version"</span>: <span class="hljs-string">"1.0"</span>,
    <span class="hljs-string">"encoding"</span>: <span class="hljs-string">"UTF-8"</span>,
    ...
    <span class="hljs-string">"feed"</span>: {
        ...
        <span class="hljs-string">"entry"</span>: &#91;{
            ...
            <span class="hljs-string">"title"</span>: {
                <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
                <span class="hljs-string">"$t"</span>: <span class="hljs-string">"1"</span>
            },
            <span class="hljs-string">"content"</span>: {
                <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
                <span class="hljs-string">"$t"</span>: <span class="hljs-string">"name: hoge, content: this is hoge"</span>
            }
        }]
    }
}
</code></span></pre>


<p>一方「セル」の場合は、内容を含むセル毎にentryを出力します。<br />
現在地はtitleの「A1」「B1」「A2」などで取得できる他、<br />
id属性にあるURLの末尾にRC方式で記載されています。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://spreadsheets.google.com/feeds/cells/[document_id]/od6/public/basic/R1C3
</div></figure>
</blockquote>


<pre class="wp-block-code"><span><code class="hljs language-javascript">{
    <span class="hljs-string">"version"</span>: <span class="hljs-string">"1.0"</span>,
    <span class="hljs-string">"encoding"</span>: <span class="hljs-string">"UTF-8"</span>,
    ...
    <span class="hljs-string">"feed"</span>: {
        <span class="hljs-string">"entry"</span>: &#91;
            {
                ...
                <span class="hljs-string">"title"</span>: {
                        <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
                        <span class="hljs-string">"$t"</span>: <span class="hljs-string">"A1"</span>
                },
                <span class="hljs-string">"content"</span>: {
                        <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
                        <span class="hljs-string">"$t"</span>: <span class="hljs-string">"id"</span>
                }
            },
            {
                ...
                <span class="hljs-string">"title"</span>: {
                        <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
                        <span class="hljs-string">"$t"</span>: <span class="hljs-string">"B1"</span>
                },
                <span class="hljs-string">"content"</span>: {
                        <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
                        <span class="hljs-string">"$t"</span>: <span class="hljs-string">"name"</span>
                }
            },
            <span class="hljs-comment">/* セルの分繰り返し */</span>
        ]
    }
}
</code></span></pre>


<h3 class="wp-block-heading">どっちがいいの？</h3>



<p>一見すると「リスト」の方が扱いやすそうなのですが、<br />
「リスト」は区切り文字に使用される「,」および「:」がセルの内容に含まれていても、<br />
エスケープ等はしてくれないのでパースが少々厄介になります。</p>



<p>つまり、セル内容に区切り文字を含む可能性がある場合は<br />
「セル」方式を整理して利用した方が安全そうです。</p>



<h2 class="wp-block-heading">JSONPしてみる</h2>



<p>jQueryを使ってJSONPで取得してみます。<br />
コールバック用のパラメータは「callback」なのでデフォルトでOK。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> url = <span class="hljs-string">"&#91;your_url]"</span>;

$.ajax({
    <span class="hljs-attr">url</span> : url,
    <span class="hljs-attr">dataType</span> : <span class="hljs-string">"jsonp"</span>,
    <span class="hljs-attr">success</span> : <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data, status</span>)</span>{
        $.each(data.feed.entry, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">i, item</span>)</span>{
            <span class="hljs-built_in">console</span>.log(item);
        });
    }
});
</code></span></pre>


<p>渡されたオブジェクトをdataとして、data.feed.entryと辿ると各アイテムが取得できます。</p>



<h2 class="wp-block-heading">どんな時につかえそうか</h2>



<p>CMSは数あれど、ニュース記事や静的なページは編集出来ても、<br />
表形式の内容の編集には基本的には向いていません。<br />
また、「MTやWordPressはわからないけどExcelなら使えるよ！」<br />
という方も、一般企業のWeb担当さんにはいらっしゃるかもしれません。</p>



<p>例えば、</p>



<ul class="wp-block-list">
<li>お店のメニュー</li>



<li>ショップリスト</li>



<li>スライダーの画像リスト</li>
</ul>



<p>といったコンテンツをクライアントが更新担当する場合は導入検討の余地がありそうですね。<br />
表形式は、ページというより簡易データベースとして活躍しそうです。</p>



<p>私は先日、JavaScriptから商品リストを読み込みたい案件があり、<br />
定期的にメンテナンスもある関係上管理しやすくする為、導入してみました。</p>



<h2 class="wp-block-heading">デメリットなど</h2>



<h3 class="wp-block-heading">アクセシビリティの問題</h3>



<p>JavaScriptでの出力となると、当然アクセシビリティの問題が生じます。<br />
そこらへんが気になる性格のコンテンツにはあまり適切な手法ではないと思います。<br />
それでも導入したい場合はクライアント側のJavaScriptではなくサーバサイドでの処理、<br />
且つキャッシュの保持等を検討した方が良いかもしれません。</p>



<h3 class="wp-block-heading">オーナー情報に注意</h3>



<p>出力結果を見るとわかりますが、gmailのアカウント名が思いっきり出力されます。<br />
気になる場合は専用のアカウントを使うか、<br />
開発が終わったら担当者のアカウントに移譲した方が良いでしょう。</p>



<h2 class="wp-block-heading">後半へ</h2>



<p>後半は、これを単純化するライブラリを書いてみたので、そのご紹介です。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>様々な言葉でJSONを弄ってみるメモ</title>
		<link>https://blog.mach3.jp/2010/10/22/json-on-various-lang.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 22 Oct 2010 05:35:23 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=913</guid>

					<description><![CDATA[引き続きJSONのお話ですが、 連携に向いているフォーマットだ、という事はつまり 他の言語でを扱う方法を知っておかねばならないという事。 という訳で、軽くメモっておきます。 次のようなJSONフォーマットの文字列が 「s [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>引き続きJSONのお話ですが、<br />
連携に向いているフォーマットだ、という事はつまり<br />
他の言語でを扱う方法を知っておかねばならないという事。<br />
という訳で、軽くメモっておきます。</p>



<span id="more-913"></span>



<p>次のようなJSONフォーマットの文字列が<br />
「<em>str</em>」に格納されていると想定します。</p>


<pre class="wp-block-code"><span><code class="hljs language-json">{
    <span class="hljs-attr">"status"</span> : <span class="hljs-string">"success"</span>,
    <span class="hljs-attr">"content"</span> : &#91;
        { <span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span> , <span class="hljs-attr">"message"</span> : <span class="hljs-string">"Nice to meet you, world !"</span> },
        { <span class="hljs-attr">"id"</span> : <span class="hljs-number">2</span> , <span class="hljs-attr">"message"</span> : <span class="hljs-string">"Hello, world !"</span> },
        { <span class="hljs-attr">"id"</span> : <span class="hljs-number">3</span> , <span class="hljs-attr">"message"</span> : <span class="hljs-string">"Hello again, world !"</span> }
    ]
}
</code></span></pre>


<p>この文字列をオブジェクトとしてロードし、<br />
それをもう一度JSON文字列として出力するテストです。</p>



<h2 class="wp-block-heading">PHP</h2>


<pre class="wp-block-code"><span><code class="hljs language-php">$php_obj = json_decode( $str ); <span class="hljs-comment">// JSONからPHPオブジェクトを生成</span>
$json_string = json_encode( $php_obj ); <span class="hljs-comment">// PHPオブジェクトからJSONを生成</span>
</code></span></pre>


<p>さすが関数から生まれてきたような言語のPHP。<br />
JSONだって関数一発です。</p>



<h2 class="wp-block-heading">Ruby</h2>



<p>Rubyは1.9からjsonライブラリが標準搭載されているそうです。<br />
当方の環境も1.9だったのでそのままそれを利用させて頂きます。</p>



<p><a href="http://doc.ruby-lang.org/ja/1.9.1/library/json.html">library json</a></p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">require</span> <span class="hljs-string">"json"</span> <span class="hljs-comment"># jsonライブラリが必要</span>
ruby_obj = JSON.load( str ) <span class="hljs-comment"># JSONからRubyオブジェクトを生成</span>
json_string = JSON.generate( ruby_obj ) <span class="hljs-comment"># RubyオブジェクトからJSONを生成</span>
</code></span></pre>


<p>1.9未満だと他のライブラリに依存する事になります。<br />
面倒なので（!?）ここでは割愛。</p>



<h2 class="wp-block-heading">ActionScript3</h2>



<p>AS3はJSONのパーサが標準装備されていないので、<br />
<em>as3corelib</em>を使わせていただきます。</p>



<p><a href="http://github.com/mikechambers/as3corelib">mikechambers&#8217;s as3corelib at master &#8211; GitHub</a></p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">import</span> com.adobe.serialization.json.JSON; <span class="hljs-comment">// as3corelibからインポート</span>

<span class="hljs-comment">// 中略</span>

<span class="hljs-keyword">var</span> as3_obj:<span class="hljs-built_in">Object</span> = <span class="hljs-built_in">JSON</span>.decode( str ); <span class="hljs-comment">// JSONからAS3オブジェクトを生成</span>
<span class="hljs-keyword">var</span> json_string:<span class="hljs-built_in">String</span> = <span class="hljs-built_in">JSON</span>.encode( as3_obj ); <span class="hljs-comment">// AS3オブジェクトからJSONを生成</span>
</code></span></pre>


<p>AS3というとXMLと相性も良いのでそちらをチョイスする事が多かったですが、<br />
データ量によっては帯域節約の為にJSONを使うのも大いにありですね。その後も楽ですし。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>XMLとかYAMLとか色々ありますが、JavaScriptの隆盛もあって<br />
最近はJSONフォーマットがもてはやされている感じですね。<br />
学習コストも極めて少なくて済むので、今後とも重宝されそうです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>jQueryはJSONPの理解の妨げになるか？</title>
		<link>https://blog.mach3.jp/2010/10/19/jquery-jsonp.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 19 Oct 2010 02:17:15 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[JSONP]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=922</guid>

					<description><![CDATA[コンパクトで汎用的な「JSON」は、今やWebサービスの連携になくてはならない存在ですね。 各種APIもXML以上にJSON対応が必要とされていると思います。 今日はそんなJSON/JSONPと、jQueryが便利すぎて [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>コンパクトで汎用的な「JSON」は、今やWebサービスの連携になくてはならない存在ですね。<br />
各種APIもXML以上にJSON対応が必要とされていると思います。<br />
今日はそんなJSON/JSONPと、jQueryが便利すぎて逆に困ってしまう！というお話。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TLxuJgDsHdI/AAAAAAAABD0/NNWrpvho1qw/201010190055.png" alt="jQueryはJSONPの理解の妨げになるか？"/></figure>



<p></p>



<span id="more-922"></span>



<h2 class="wp-block-heading">JSON</h2>



<p><em>JSON</em>とは「JavaScript Object Node」の略で、<br />
その名の通りJavaScriptのオブジェクトを表した物。<br />
中身は勿論JavaScriptのオブジェクトリテラルです。</p>


<pre class="wp-block-code"><span><code class="hljs language-json">{
    <span class="hljs-attr">"status"</span> : <span class="hljs-string">"success"</span>,
    <span class="hljs-attr">"content"</span> : &#91; <span class="hljs-string">"hoge"</span>, <span class="hljs-string">"fuga"</span>, <span class="hljs-string">"foo"</span>, <span class="hljs-string">"bar"</span> ]
}
</code></span></pre>


<p>昨今はXMLにかわって情報をやり取りする際のフォーマットとして<br />
頻繁に使われるようになりました。</p>



<p>ただ、外部サービスと通信する際に、<br />
AjaxでJSONをやり取りするには「<em>クロスドメイン</em>」という壁があります。<br />
つまり、他ドメインに属するファイルはAjaxでは基本的に取得出来ないのです。</p>



<p>そこでJSONPの出番です。</p>



<h2 class="wp-block-heading">JSONP</h2>



<p><em>JSONP(JSON with Padding）</em>というのは、<br />
<em>コールバック関数</em>を介してJSONのデータを受け取る手法です。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">myfunc({
    <span class="hljs-string">"status"</span> : <span class="hljs-string">"success"</span>,
    <span class="hljs-string">"content"</span> : &#91; <span class="hljs-string">"hoge"</span>, <span class="hljs-string">"fuga"</span>, <span class="hljs-string">"foo"</span>, <span class="hljs-string">"bar"</span> ]
});
</code></span></pre>


<p>JSONを出力する側では、こんな感じに関数の引数に渡してやります。</p>



<p>上では関数名が「<em>myfunc</em>」になっていますが、<br />
APIを公開している多くのサービスは、<br />
大抵この関数名をパラメータで指定出来るようになっています。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span>&gt;</span><span class="javascript">
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">myfunc</span>(<span class="hljs-params">data</span>)</span>{
    <span class="hljs-built_in">console</span>.log( data );
}
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"http://example.com/hoge.json?callback=myfunc"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>コールバック関数を宣言したら、あとはscript要素でAPIにアクセスする。<br />
「<em>myfunc</em>」内でJSONのデータを受け取り、煮たり焼いたりしましょう。<br />
思いのほかシンプル。</p>



<p>そんなJSONPですが、<br />
jQueryを通すとJSONPの仕組みが隠蔽されたような形になります。</p>



<h2 class="wp-block-heading">jQueryでJSONPを使うと…</h2>



<h3 class="wp-block-heading">jQuery.ajax</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$.ajax({
    <span class="hljs-attr">url</span>:<span class="hljs-string">"http://example.com/hoge.json"</span>,
    <span class="hljs-attr">dataType</span>:<span class="hljs-string">"jsonp"</span>,
    <span class="hljs-attr">jsonp</span>:<span class="hljs-string">"callback"</span>,
    <span class="hljs-attr">success</span>:<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{
        <span class="hljs-built_in">console</span>.log( data );
    }
});
</code></span></pre>


<p>上の例と同じ処理をしているわけですが、<br />
普通のAjaxとほぼ同じ書式で出来てしまいますね。<br />
違うのは、<em>dataType</em>パラメータと<em>jsonp</em>パラメータぐらい。</p>



<p><em>script要素の追加</em>、<em>コールバック関数の指定</em>等は、<br />
jQueryが勝手に代理で行ってくれます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"http://example.com/hoge.json?calback=jsonp1287411860619"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>DOMを見ていると、こんな感じのscript要素が生成されています。<br />
コールバック関数名も動的に生成し、その中身を<em>success</em>で設定した関数にしているわけですね。</p>



<h2 class="wp-block-heading">まずは生JSで書いてみた方が良いと思う</h2>



<p>前半で紹介したとおり、JSONPは全くもってシンプルな手法なのですが、<br />
このようにjQueryを用いることで得体の知れない物になってしまっていませんか？<br />
面倒な処理を代理で行ってくれるのがフレームワークなのですが、<br />
その親切が学習する上での妨げになってしまう事があります。<br />
（JSONPの例に限った話ではなく）</p>



<p>まずは、フレームワークに頼らない生のスクリプトで実験してみる。</p>



<p>そうする事が、その技術に対する理解を深められるだけでなく、<br />
フレームワークをより上手く活用出来るようになる為の近道になるのではないかと<br />
自戒の意も含めてここに記しておきます。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
