如何使用 ruby 迭代和检索 json 对象的值
how to iterate and retrive just the values from a json object with ruby
假设我有一个简单的 json 对象,例如
{"a" :"1", "b":"2", "c":"3"}
在 ruby 中,我如何遍历该对象才能获得值 1、2 和 3。
假设您将对象作为字符串。
require 'json'
json_obj = '{"a" :"1", "b":"2", "c":"3"}'
values = JSON.parse(json_obj).values
将为您提供数组
["1", "2", "3"]
JSON.parse ,将 json 字符串解析为 ruby 对象,在本例中是 Hash. The Hash class has a method values 的实例,其中 returns 包含值或每个哈希条目。
这是一个纯 ruby 方法(不需要 JSON
模块),可用于解析像这样的简单 json
字符串:
首先使用 regex
将您的字符串转换为数组,该 regex
匹配并捕获引号中包含的任何内容:
json_str = '{"a" :"1", "b":"2", "c":"3"}'
json_arr = json_str.scan(/"(.*?)"/).map(&:join)
#=> ["a", "1", "b", "2", "c", "3"]
您可以就此打住,只使用 each_slice(2).map(&:last)
之类的方法遍历该数组以获取每隔一个元素,或者您可以完成到 hash
的转换。有几种方法可以做到这一点,但这里使用 Hash[]
和 splat operator
:
json_hash = Hash[*json_arr]
#=> {"a"=>"1", "b"=>"2", "c"=>"3"}
然后您可以简单地访问 values
:
json_hash.values
#=> ["1", "2", "3"]
全部在一行中:
Hash[*'{"a\'a\'" :"1", "b":"2", "c":"3"}'.scan(/"(.*?)"/).map(&:join)].values
假设我有一个简单的 json 对象,例如
{"a" :"1", "b":"2", "c":"3"}
在 ruby 中,我如何遍历该对象才能获得值 1、2 和 3。
假设您将对象作为字符串。
require 'json'
json_obj = '{"a" :"1", "b":"2", "c":"3"}'
values = JSON.parse(json_obj).values
将为您提供数组
["1", "2", "3"]
JSON.parse ,将 json 字符串解析为 ruby 对象,在本例中是 Hash. The Hash class has a method values 的实例,其中 returns 包含值或每个哈希条目。
这是一个纯 ruby 方法(不需要 JSON
模块),可用于解析像这样的简单 json
字符串:
首先使用 regex
将您的字符串转换为数组,该 regex
匹配并捕获引号中包含的任何内容:
json_str = '{"a" :"1", "b":"2", "c":"3"}'
json_arr = json_str.scan(/"(.*?)"/).map(&:join)
#=> ["a", "1", "b", "2", "c", "3"]
您可以就此打住,只使用 each_slice(2).map(&:last)
之类的方法遍历该数组以获取每隔一个元素,或者您可以完成到 hash
的转换。有几种方法可以做到这一点,但这里使用 Hash[]
和 splat operator
:
json_hash = Hash[*json_arr]
#=> {"a"=>"1", "b"=>"2", "c"=>"3"}
然后您可以简单地访问 values
:
json_hash.values
#=> ["1", "2", "3"]
全部在一行中:
Hash[*'{"a\'a\'" :"1", "b":"2", "c":"3"}'.scan(/"(.*?)"/).map(&:join)].values