我收到(类似于)以下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数据)。
答案 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)
会像原始问题中的括号语法一样失败。