You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从指定JSON数据中提取lifetimeScore的值?

解决方案:提取lifetimeScore对应的value值

你的问题出在对数据结构的理解上——咱们先把你给出的数据结构拆解清楚,就能明白为什么之前的代码无效了:

# 整理后更清晰的数据结构
data = {
  "accountId" => "some-private-really-long-account-id",
  "stats" => {
    "score" => {
      "globalScore" => [
        {"key"=>"lifetimeScore", "value"=>"571"},
        {"key"=>"someOtherKeyHere", "value"=>"someValue"}
      ]
    }
  }
}

核心问题分析:

  1. 你之前写的data["globalScore"]路径错误——globalScore是嵌套在stats -> score下面的,不是data的直接子键;
  2. 更关键的是: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:04:22