web-dev-qa-db-ja.com

RubyでJSON文字列を解析する

Rubyで解析したい文字列があります。

string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'

データを抽出する簡単な方法はありますか?

323
Rod

これは JavaScript Object Notation(JSON) のようになります。あなたはいくつかの変数に存在するJSONを解析することができます。 json_string、こんな感じ:

require 'json'
JSON.parse(json_string)

古いRubyを使っているのなら、 json gem をインストールする必要があるかもしれません。


Ruby用のJSONの実装は他にもあります。

494
Greg

パースされたオブジェクトをどうするかで答えを少し拡張してください。

# JSON Parsing example
require "rubygems"
require "json"

string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'
parsed = JSON.parse(string) # returns a hash

p parsed["desc"]["someKey"]
p parsed["main_item"]["stats"]["a"]

# Read JSON from a file, iterate over objects
file = open("shops.json")
json = file.read

parsed = JSON.parse(json)

parsed["shop"].each do |shop|
  p shop["id"]
end
193
nevan king

Ruby v1.9.3では、JSONを解析するためにGemをインストールする必要はありません。単にrequire 'json'を使用してください。

require 'json'

json = JSON.parse '{"foo":"bar", "ping":"pong"}'
puts json['foo'] # prints "bar"

Ruby-Docの _ json _ を参照してください。

36
dav_i

JSON文字列のように見えます。あなたは多くのJSONライブラリのうちの1つを使うことができ、それはするのと同じくらい簡単です:

JSON.parse(string)
12
keymone

これは少し遅れていますが、私は貢献することが重要であると思われる何か面白いものに遭遇しました。

誤ってこのコードを書いたのですが、うまくいくようです。

require 'yaml'
CONFIG_FILE = ENV['CONFIG_FILE'] # path to a JSON config file 
configs = YAML.load_file("#{CONFIG_FILE}")
puts configs['desc']['someKey']

私はYAMLライブラリを使用しているのでそれが機能するのを見て驚きましたが、それは機能します。

重要なのは、yamlがRubyに組み込まれているため、gemのインストールが行われないためです。

私はバージョン1.8.xおよび1.9.xを使用しています - それでjsonライブラリは組み込まれていませんが、それはバージョン2.xにあります。

技術的には - これが2.0より前のバージョンでデータを抽出する最も簡単な方法です。

6
guy mograbi

Ojは標準のJSONライブラリよりも速いので、Ojをお勧めします。

https://github.com/ohler55/oj

ここでパフォーマンスの比較を参照してください

4
damianmr

そのデータはJSON形式のように見えます。

これを抽出するには、この JSON実装をRuby に使用します。

4
Justin Ethier