ruby-on-rails - 使用 Ruby 搜索 JSON 响应

标签 ruby-on-rails ruby json

我正在使用 Ruby 脚本与应用程序 API 交互,返回的结果采用 JSON 格式。例如:

{
  "incidents": [
    {
      "number": 1,
      "status": "open",
      "key": "abc123"
    }
    {
      "number": 2,
      "status": "open",
      "key": "xyz098"
    }
    {
      "number": 3,
      "status": "closed",
      "key": "lmn456"
    }
  ]
}

我希望在每个 block 中搜索特定的“键”值(本例中为 yzx098)并返回关联的“数字”值。

现在,我对 Ruby 还很陌生,我不确定是否已经有一个函数可以帮助实现这一点。然而,搜索谷歌和 Ruby 资源书籍几天没有产生任何有用的东西。

有什么建议吗?

最佳答案

首先,JSON 应该如下所示:(注意逗号)

 {
  "incidents": [
    {
      "number": 1,
      "status": "open",
      "key": "abc123"
    },
    {
      "number": 2,
      "status": "open",
      "key": "xyz098"
    },
    {
      "number": 3,
      "status": "closed",
      "key": "lmn456"
    }
  ]
}

将上面的json存储到一个变量中

s =  '{"incidents": [{"number": 1,"status": "open","key": "abc123"},{"number": 2,"status": "open","key": "xyz098"},{"number": 3,"status": "closed","key": "lmn456"}]}'

解析JSON

h = JSON.parse(s)

使用 map 查找所需的 number

h["incidents"].map {|h1| h1['number'] if h1['key']=='xyz098'}.compact.first

或者你也可以像下面这样使用find

 h["incidents"].find {|h1| h1['key']=='xyz098'}['number']

或者你也可以像下面那样使用select

h["incidents"].select {|h1| h1['key']=='xyz098'}.first['number']

关于ruby-on-rails - 使用 Ruby 搜索 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22415525/

相关文章:

ruby-on-rails - 自记录 REST 接口(interface)

javascript - 如何在我的 Rails 后端和浏览器的 Javascript 中为字符串生成哈希值?

ruby - Mac 用户并收到警告 : Nokogiri was built against LibXML version 2. 7.8,但已动态加载 2.7.3

c - 为什么此代码不适用于 ruby​​ 1.9 但适用于 ruby​​ 1.8?

java - 使用 jQuery 使用 Java RESTful webservice

ios - Facebook SDK iOS 连接的 Rails-api 身份验证?

ruby-on-rails - 如何使用 SQL 获取按年份分组的最新值

ruby - 使用正则表达式找到一个字符串,然后使用正则表达式找到一个新的字符串来替换它

javascript - jQuery AutoComplete 不适用于 JSON 响应

javascript - 数组内的数组