提取特定的JSON数据

时间:2018-03-20 15:56:35

标签: ruby-on-rails arrays json ruby

我收到(类似于)以下JSON数据:

    {"accountId"=>"some-private-really-long-account-id",
     "stats"=>
      {"score"=>
        {"globalScore"=>
          [{"key"=>"lifetimeScore", "value"=>"571",

          "key"=>"someOtherKeyHere", "value"=>"someValue"}]}

我不太确定如何获得终身分数。我尝试过这样的事情:

puts data["globalScore"]["lifetimeScore"]["value"]

但这并不奏效。 (data当然是收到的JSON数据)。

2 个答案:

答案 0 :(得分:1)

使用JSON.parse(body)将您的json转换为哈希值。然后使用hash.dig('stats', 'score', 'globalScore', 0, 'value')对该哈希运行查询。

答案 1 :(得分:1)

我认为这里的问题是data["globalScore"]["lifetimeScore"]["value"]没有引用JSON中的有效“路径”。更好的格式化有助于澄清这一点:

  hash = {
    "accountId" => "some-private-really-long-account-id",
    "stats" => {
      "score" => {
        "globalScore" => [
          {
            "key"   => "lifetimeScore", 
            "value" => "571", 
            "key"   => "someOtherKeyHere", 
            "value" => "someValue"
          }
        ]
      }
    }
  }

这个Ruby哈希有一些问题,因为哈希实际上并没有给定键的多个值,但除此之外,

hash['stats']['score']['globalScore'][0]['value']

是访问“值”字段的完美有效方式。

我的观点是原始问题的问题不在于应该使用hash#...(如@Phlip所示),而是通过Hash数据结构的“路径”实际上是无效的

hash.dig("globalScore", "lifetimeScore", "value)

会像原始问题中的括号语法一样失败。