2011-03-23 69 views
275

JSON字符串我有,我想在Ruby中解析字符串:解析在Ruby中

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

有沒有一種簡單的方法來提取數據?

+11

_JSON在Ruby中直接支持,至少從Ruby v1.9.3開始,所以不需要安裝gem,除非您使用的是舊版本。只需在代碼中使用'require'json''. – 2015-11-09 17:41:17

回答

427

這看起來像Javascript Object Notation (JSON)。您可以安裝JSON gem for Ruby

gem install json 

你會需要像這樣在你的代碼寶石:

require 'rubygems' 
require 'json' 

然後你可以分析你的JSON字符串是這樣的:

JSON.parse(string) 

有爲Ruby JSON的還有其他的實現:

+18

也可以將選項symbolize_names設置爲true,以便將鍵作爲符號。例如:'JSON.parse(string,symbolize_names:true)#=> {key::value}' – 2014-04-02 00:25:22

+23

_JSON在Ruby中直接支持,並且至少從Ruby v1.9.3開始,因此不需要安裝寶石,除非你使用的東西比較老。只需在您的代碼中使用'require'json''. – 2015-11-09 17:44:48

11

它看起來像一個JSON字符串。您可以使用許多JSON庫中的一個,就像在做:

JSON.parse(string) 
4

這數據看起來是JSON格式。

您可以使用此JSON implementation for Ruby來提取它。

+0

好的網站可以很好地解釋[JSON](http://jsonlint.com/) – 2013-07-30 19:28:09

171

只是延長了答案有點什麼與解析的對象做:

# 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 
+0

。 – berto77 2014-01-08 16:17:36

+3

重要提示:''{「a」:「bob」}「'是有效的。 '「{'a':'bob'}」'不是。 – Ziggy 2014-01-15 10:33:08

+0

@Ziggy爲什麼呢? – Linus 2014-04-10 08:08:09

5

這是有點晚了,但我遇到了一些有趣的事情,似乎重要的貢獻。

我不小心寫了這個代碼,似乎工作:

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,所以沒有創業板安裝。

我正在使用版本1.8.x和1.9.x - 所以json庫不內置,但它是在版本2.x.

從技術上講 - 這是提取低於2.0版本數據的最簡單方法。

+0

是的,JSON實際上是由Psych代碼解析的,它也解析Ruby中的YAML。 JSON解析在[Ruby v1.9.3]中引入(http://ruby-doc.org/stdlib-1.9.3/libdoc/json/rdoc/index.html)。 – 2015-11-09 17:42:21

+1

這個工作的原因是語義上(大多數)JSON是有效的YAML(特別是YAML 1.2) – 2016-07-18 23:05:30

28

截至Ruby v1.9。3,你不需要爲了解析JSON安裝任何寶石,只需使用require 'json'

require 'json' 

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

在Ruby的文件見JSON