ユーザ用ツール

サイト用ツール


json

json

JavaScript Object Notation

http://www.json.org/

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

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

情報源

<html> <iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=r4wh-22&o=9&p=8&l=as1&m=amazon&f=ifr&md=1X69VDGQCMF7Z30FM082&asins=4774142042" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> </html>

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 (外部編集)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki