Ruby + JSON
Ruby 1.9 からはJSONがデフォルトサポートされているらしい、、、
ということで、
前使用したJSONデータを読み込んでみた。
sample.json
[{ "title": "tete", "price": "1280", "pages": [ { "page": "1", "g": 22 }, { "page": "2", "g": 33 }, { "page": "3", "g": 11 } ] }, { "title": "2", "price": "1235", "pages": [ { "page": "4", "g": 66 }, { "page": "5", "g": 55 }, { "page": "6", "g": 44 } ] }]
test.rb
どうにも Parse だとJSONの配列形式うまく取り込めないのかな?
かなり無理やり感があるけど、とりあえず動くレベルのソース
なんというか汚いソースだ。良い方法ないかな?
# -*- encoding: UTF-8 -*- require 'json' require './book' require './page' books = Array.new # JSONファイル読み込み # ファイルオープン open("sample.json","r:UTF-8") do |io| #print io.read # JSON Load json = JSON.parse(io.read) #print json b1,b2,b3=false json.each do |k| book = Book.new k.each do |l,n| if l == "title" then book.setTitle(n) print "title:#{book.getTitle}\n" b1 = true elsif l == "price" then book.setPrice(n) print "price:#{book.getPrice}\n" b2 = true elsif l == "pages" pages = Page.new p1,p2 = false n.each do |o| o.each do |p,q| if p == "page" then print "page:#{q}\n" pages.setPage(q) p1=true elsif p == "g" then print "g:#{q}\n" pages.setG(q) p2=true end if p1 && p2 then print "print\n" book.setPage(pages) p1,p2 = false pages = Page.new end end end b3 =true end if b1 && b2 && b3 then books << book b1,b2,b3=false end end end print books end
一応取得したデータは beanもどきを作って格納 addPageは不要だな(書いたけど実装めんどくさいから放置)
book.rb
# -*- encoding: UTF-8 -*- require './page' class Book def initialize @title="" @price=0 @page=Array.new end def setTitle(title) @title = title end def setPrice(price) @price = price end def setPage(page) @page << page end def addPage(page,g) tmpPage = Page.new(page,g) setPage(tmpPage) end def getTitle return @title end def getPrice return @price end def getPage return @Page end end
page.rb
# -*- encoding: UTF-8 -*- class Page def initialize(page="",g=0) @page=page @g=g end def setPage(page) @page = page end def setG(g) @g = g end def getPage return @page end def getG return @g end end
まーprintの結果は以下のような感じに。
これさえ出来りゃちょっとだけよーってな感じでデータ取れるかな。
[#<Book:0x2b4d180 @title="tete", @price="1280", @page=[#<Page:0x2b4ca78 @page="1", @g=22>, #<Page:0x2b4c7c0 @page="2", @g=33>, #<Page:0x2b4c580 @page="3", @g=11>]>, #<Book:0x2b4c2e0 @title="2", @price="1235", @page=[#<Page:0x2b4bc08 @page="4", @g=66>, #<Page:0x2b4b998 @page="5", @g=55>, #<Page:0x2b4b770 @page="6", @g=44>]>]