我有一个我想在Ruby中解析的字符串:
string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法来提取数据?
Gre*_*reg 532
这看起来像JavaScript Object Notation(JSON).您可以解析驻留在某个变量中的JSON,例如json_string:
require 'json'
JSON.parse(json_string)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是较旧的Ruby,则可能需要安装json gem.
还有其他JSON for Ruby实现可以更好地适应一些用例:
nev*_*ing 200
只是为了解释一下如何解析对象:
# 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
Run Code Online (Sandbox Code Playgroud)
dav*_*v_i 37
从Ruby v1.9.3开始,您不需要安装任何Gems来解析JSON,只需使用require 'json':
require 'json'
json = JSON.parse '{"foo":"bar", "ping":"pong"}'
puts json['foo'] # prints "bar"
Run Code Online (Sandbox Code Playgroud)
请参阅Ruby-Doc中的JSON.
key*_*one 14
它看起来像一个JSON字符串.您可以使用许多JSON库中的一个,它就像这样简单:
JSON.parse(string)
Run Code Online (Sandbox Code Playgroud)
Adv*_*bly 10
这里没有看到任何提到直接解析为哈希以外的对象的答案,但可以使用记录不充分的 object_class 选项(请参阅https://ruby-doc.org/stdlib-2.7.1/libdoc/ json/rdoc/JSON.html ):
JSON.parse('{"foo":{"bar": 2}}', object_class: OpenStruct).foo.bar
=> 2
Run Code Online (Sandbox Code Playgroud)
阅读该选项的更好方法是“JSON 对象变成的 ruby 类”,这解释了为什么它默认为 Hash。同样,json 数组有一个 array_class 选项。
这有点晚了,但我遇到了一些有趣的东西,似乎很重要.
我不小心写了这段代码,它似乎工作:
require 'yaml'
CONFIG_FILE = ENV['CONFIG_FILE'] # path to a JSON config file
configs = YAML.load_file("#{CONFIG_FILE}")
puts configs['desc']['someKey']
Run Code Online (Sandbox Code Playgroud)
我很惊讶地看到它起作用,因为我正在使用YAML库,但它确实有效.
它之所以重要,yaml是内置Ruby,因此没有gem安装.
我使用的是1.8.x和1.9.x版本 - 因此json库不是内置的,但它是在2.x版本中.
从技术上讲 - 这是在低于2.0的版本中提取数据的最简单方法.
| 归档时间: |
|
| 查看次数: |
430789 次 |
| 最近记录: |