JSON の応答形式

JSONやJavaScriptオブジェクトでの表記方法は、機械的に読み取ることができるシンプルなデータ交換形式です。これを使うことでJavaScriptのAPIアプリケーションを簡単に作ることができます (JavaScript以外の言語でもこのデータ形式を使うことができます!)。JSONについての詳細な情報は、 json.orgを参照してください。

サーバからJSON 形式のAPI応答が返ってくるようにするには、 "format"パラメータに"json"と設定してリクエストを送ります。

オブジェクトの表記方法

flickrでREST XMLをJSONオブジェクトへ変換する場合には、いくつかの簡単なルールが使われています。最適な記載例をいくつか紹介します。 タグが一つだけ使われいる場合は、以下のようなJSON形式に変換されます。:

<foo bar="baz" />
{
	"foo": {
		"bar": "baz"
	}
}

各エレメントはJSONオブジェクトとして表されます。エレメントに設定された属性は、オブジェクトのメンバ(文字列型)として表されます。 子エレメントはオブジェクトのメンバ(オブジェクト型)として表されます。:

<foo bar="baz">
	<woo yay="hoopla" />
</foo>
{
	"foo": {
		"bar": "baz",
		"woo": {
			"yay": "hoopla"
		}
	}
}

エレメント内のテキストノードは、"_content"という特別な名前を使ってそれが属性であるかのように表されます。:

<foo>text here!</foo>
{
	"foo": {
		"_content": "text here!"
	}
}

エレメントの繰り返しが発生する場合は、(写真一覧を抽出した場合の <photo>エレメントのような)、 オブジェクトのメンバ値として配列が使われます。(メンバキーはエレメント名を表します)。 配列に格納されている各値は、子エレメントを表すオブジェクトです。

<outer>
	<photo id="1" />
	<photo id="2" />
</outer>
{
	"outer": {
		"photo": [
			{
				"id": "1"
			},
			{
				"id": "2"
			}
		]
	}
}

成功時のサーバからの応答

リクエストが成功した場合、以下のJSON形式の応答が戻り値として返ります:

jsonFlickrApi({...});

この機能を実行すると、REST 応答における <rsp>エレメントに該当する単一のオブジェクトが取得されます。 REST応答の最上位にあるエレメントは、このオブジェクトのメンバーです。(実行に成功したかどうかを確認するstatパラメータも同じくこのオブジェクトのメンバーです)。 例えば、flickr.blogs.getListでは以下のように成形された応答が戻り値として取得されます。:

<blogs>
	<blog id="73" name="Bloxus test" needspassword="0"
		url="http://remote.bloxus.com/" /> 
	<blog id="74" name="Manila Test" needspassword="1"
		url="http://flickrtest1.userland.com/" /> 
</blogs>

Flickr のJSON形式で上記と同じ内容を表す場合は:

jsonFlickrApi({
	"stat": "ok",
	"blogs": {
		"blog": [
			{
				"id"		: "73",
				"name"		: "Bloxus test",
				"needspassword"	: "0",
				"url"		: "http://remote.bloxus.com/"
			},
			{
				"id"		: "74",
				"name"		: "Manila Test",
				"needspassword"	: "1",
				"url"		: "http://flickrtest1.userland.com/"
			}
		]
	}
})

JavaScriptでユーザーブログの一覧を表示する方法は難しくありません:

function jsonFlickrApi(rsp){

	if (rsp.stat != "ok"){

		// something broke!
		return;
	}

	for (var i=0; i<rsp.blogs.blog.length; i++){

		var blog = rsp.blogs.blog[i];

		var div = document.createElement('div');
		var txt = document.createTextNode(blog.name);

		div.appendChild(txt);
		document.body.appendChild(div);
	}
}

失敗時のサーバからの応答

失敗時のサーバからの応答でもjsonFlickrApi()メソッドを呼び出しますが、形式が通常のJSONオブジェクトとは違います。オブジェクトは、REST失敗時の応答のような構造にはなっていません。 - JSON形式で簡略化されたものになっています。例えば:

jsonFlickrApi({
	"stat"		: "fail",
	"code"		: "97",
	"message"	: "Missing signature"
})

JavaScriptを使って、rsp.statを確認して処理が失敗してないか確認したり、rsp.codersp.messageからエラー状況と読み取ることができます。

コールバック機能

機能に手が加えられていない純粋なのJSONを使いたい場合は、リクエスト時にnojsoncallbackパラメータに1を設定してください。

コールバック関数名を定義するためには、jsoncallbackパラメータに任意の名前を設定してください。

nojsoncallback=1	-> {...}
jsoncallback=wooYay	-> wooYay({...});
<

ここで成功時のjsonの応答形式を見ることができます。

ここで失敗時のjsonの応答形式を見ることができます。



注意事項

  • 本サイトはflickrのサイトを翻訳したものであり、flickrに関する著作権は全てそちらに帰属しています。
  • 誤訳が判明した場合、より分かりやすい言い回しが見つかった場合、原文が変更された場合などにより、本サイトの内容は予告なく変更されることがあります。
  • 誤訳についての指摘や未翻訳部分についての助言など、ご意見についてはこちらへいただけると助かります。
  • 翻訳の内容には誤りがある可能性があります。本サイトの記述内容によって不利益が発生した場合も、サイト管理人は一切の責任を負いません。
  •