json

JavaScript Object Notation

http://www.json.org/

REST 指向の Web API に有用とされている。YAML よりもライブラリが整備されているという話も。

どのくらい簡単に扱えるものか試してみた。

情報源

Ruby on rails と Python で JSON

サーバ側は ruby_on_rails 2.3.5 のアプリケーション。scaffold で作った items_controller.rb に render :json を追加。

class ItemsController < ApplicationController
  # GET /items
  # GET /items.xml
  # GET /items.json
  def index
    @items = Item.all
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @items }
      format.json { render :json => @items }
    end
  end

ついでに Basic 認証を試す。

class ApplicationController < ActionController::Base
  helper :all # include all helpers, all the time
  protect_from_forgery # See ActionController::RequestForgeryProtection for details
 
  before_filter :basic_authentication
  protected
  def basic_authentication
    authenticate_or_request_with_http_basic do |user, pass|
      [user, pass] == ['user', 'pass']
    end
  end
end

クライアント側は Python 2.6 で記述。

import urllib2
import json
toplevelurl='example.com'
theurl='example.com/items.json'
protocol='http://'
username='user'
password='pass'
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, toplevelurl, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
pagehandle = urllib2.urlopen(protocol + theurl)
print pagehandle.geturl()
print
print pagehandle.info()
print
# print pagehandle.read()
items = json.load(pagehandle)
for i in items:
  print "%s %s" % (i['item']['id'], i['item']['name'])

実行結果。サーバは heroku で動いている。URLは修正してある。

http://example.com/items.json

Server: nginx/0.6.39
Date: Sat, 01 May 2010 12:39:46 GMT
Content-Type: application/json; charset=utf-8
Connection: close
X-Runtime: 2
ETag: "326b8c484caf73132e54cf1d67adc5f3"
Cache-Control: private, max-age=0, must-revalidate
Content-Length: 213
X-Varnish: 856212766
Age: 0
Via: 1.1 varnish


1 hogehoge
2 fuga

json.txt · 最終更新: 2010/05/01 00:00 (外部編集)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0