如何从指定JSON数据中提取lifetimeScore的值?
解决方案:提取lifetimeScore对应的value值
你的问题出在对数据结构的理解上——咱们先把你给出的数据结构拆解清楚,就能明白为什么之前的代码无效了:
# 整理后更清晰的数据结构 data = { "accountId" => "some-private-really-long-account-id", "stats" => { "score" => { "globalScore" => [ {"key"=>"lifetimeScore", "value"=>"571"}, {"key"=>"someOtherKeyHere", "value"=>"someValue"} ] } } }
核心问题分析:
- 你之前写的
data["globalScore"]路径错误——globalScore是嵌套在stats -> score下面的,不是data的直接子键; - 更关键的是:
globalScore对应的是数组(用[]包裹的部分),不是哈希,所以你不能直接用["lifetimeScore"]去访问它的元素,得先从数组里找到key为lifetimeScore的那个哈希对象,再提取它的value。
正确的提取代码
这里推荐用Ruby的find方法精准匹配目标元素(比直接取数组索引更可靠,因为数组元素的顺序可能变化):
# 1. 先定位到globalScore数组 global_score_array = data["stats"]["score"]["globalScore"] # 2. 从数组中找到key为lifetimeScore的哈希项 lifetime_score_entry = global_score_array.find { |item| item["key"] == "lifetimeScore" } # 3. 提取对应的value值(加判断避免找不到时报错) if lifetime_score_entry puts lifetime_score_entry["value"] # 输出:571 else puts "未找到lifetimeScore对应的记录" end
或者写成一行简洁版(用Ruby安全调用操作符避免报错):
puts data["stats"]["score"]["globalScore"].find { |i| i["key"] == "lifetimeScore" }&.[]("value")
为什么你的原代码无效?
对比你的原代码puts data["globalScore"]["lifetimeScore"]["value"]:
- 第一层
data["globalScore"]就返回nil,因为data的直接键只有accountId和stats; - 就算路径对了,
globalScore是数组,不是哈希,用["lifetimeScore"]访问数组会直接抛出类型错误。
内容的提问来源于stack exchange,提问作者Tearzz
相关产品推荐
相关产品推荐

