libjqが簡単に使えたので、NokogiriっぽいRubyのバインディングを作りました。
https://bitbucket.org/winebarrel/ruby-jq
JSONはHTMLほど複雑ではないですが、ネストの深いデータを一発でとってこれるのは便利…かも知れないです。
以下はGitHub APIでファイルのパスだけ取得するサンプル。「.tree[].path」だけでとってこれます。
#!/usr/bin/env ruby require 'net/http' require 'jq' https = Net::HTTP.new('api.github.com', 443) https.use_ssl = true https.verify_mode = OpenSSL::SSL::VERIFY_NONE res = https.start do |w| w.get('/repos/rails/rails/git/trees/master?recursive=1') end JQ(res.body).search('.tree[].path') do |value| p value end
jpのHEADのビルドについて
jqのHEADからビルドする場合、autoreconfから始める必要があって、少し手間でした。
Macの場合、とりあえずautomake、autoconf、libtool、bisonをイントールして、bisonにパス通して、「./configure --enable-shared」で共有ライブラリを作れました。makeの途中で、rakeによるドキュメント生成に失敗したりしましたが…。
また、他のマックで同様にビルドしようとしたところ「thread-local storage not supported for this target」のエラー。なので https://github.com/stedolan/jq/blob/master/jv_alloc.c#L14 から 「__thread」 を削除…
使えるかどうかわかりませんが、Macのバイナリを添付しておきます。
libjq.tar.gz