【问题标题】:Extracting specific JSON data提取特定的 JSON 数据
【发布时间】:2018-08-29 12:54:07
【问题描述】:

我收到(类似于)以下 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数据)。

【问题讨论】:

  • parse json to object ruby的可能重复
  • 使用 JSON.parse(body) 将您的 json 转换为哈希。然后使用hash.dig('stats', 'score', 'globalScore', 0, 'value') 对该哈希运行查询。
  • 你发的json数据好像少了一个“}”,能发一下原始的吗?
  • 原始 JSON 数据太长了。
  • @Phlip,谢谢! :D

标签: ruby-on-rails arrays json ruby


【解决方案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#dig(...) (如@Phlip所示),而是通过 Hash 数据结构的“路径”实际上是无效的.

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 2020-10-02
      • 2015-02-18
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多