如何使用 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