【问题标题】:Ruby - How do you access the key value in parsed jsonRuby - 如何访问已解析 json 中的键值
【发布时间】:2019-08-07 17:08:03
【问题描述】:

我得到这个 json 作为对我的 api 调用的响应。我需要得到评论以在我的测试中验证它。我只会在回复中得到一条记录。如何访问评论值“意大利食谱”? 我做了 JSON.parse(response) 并得到了 ruby​​ 哈希。我需要帮助从哈希中提取值。

{  
   “recipe”:{  
      "id":10,
      "created_at":"2019-03-16T22:21:03Z",
      "updated_at":"2019-03-16T23:07:07Z",
        },
   "audit":{  
      "id":402216837440,
      "recipe_id":10,
      "created_at":"2019-03-16T23:07:07Z",
       "events":[  
         {  
            "id":402216837460,
            "author_id":179,
            "Comment":"Italian Recipes.",
            "audit_id":402216837440
         }
      ],
      "via":{  
         "channel":"api"
         }
   }
}

我试过了,但我认为这不是正确的格式。我收到错误。需要有关正确语法的帮助。

parsed_response = JSON.parse(res)
parsed_response['audit']['events']['comment']

【问题讨论】:

  • 提示:将其提供给 JSON.parse 会给你一个 ruby​​ 哈希值。
  • “但我认为这不是正确的格式”——当然。 events 是一个数组。在这种情况下,它只包含一个元素,但如果它包含多个元素,您希望获得哪条评论?
  • 如果"json" 是您的字符串,您知道直接键是"Comment",并且该键不会出现在其他任何地方(即使您不知道哈希的其余结构)你可以写json[/(?<=\"Comment":")[\p{Alnum}, ]+/] #=> "Italian Recipes"。但是,如果您确实知道散列的结构,则确实应该将字符串转换为散列并挖掘所需的值。请注意,双引号和单引号在正则表达式中没有特殊含义。
  • 您选择的答案没有问题,但以后请考虑等待更长时间再做出选择。快速选择可能会阻止其他答案,有些人认为它们对那些仍在研究答案的人是不礼貌的。关键是不要着急。大多数提问者至少要等几个小时,有些比这更长。
  • @Sergio,我以前犯过这个错误。之前可能是你纠正了我。让我们看看我以后是否还记得。

标签: ruby-on-rails json ruby parsing


【解决方案1】:
json_data = JSON.parse(json_string)
comment = json_data['audit']['events'].first['Comment']
recipe_id = json_data['recipe']['id']

【讨论】:

  • 谢谢!有用。你能帮我查看食谱中的ID吗?我尝试了 json_data['recipe'].first['id'] 并得到错误 undefined method `first' for nil:NilClass。这适用于有更多记录的情况。仅当只有一条记录时才会出现此错误
  • @stuart:从你给我们看的,recipe 不是一个数组,你为什么在上面使用first? (但它也不应该引发这个错误。你确定你的json_data 有密钥recipe?)
  • @SergioTulentsev 是的,我的 json_data 有配方密钥
  • @stuart 我已经更新了答案以获取 recipe_id。
猜你喜欢
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
相关资源
最近更新 更多