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

如何在Ruby中通过点分隔字符串从JSON中取值?

在Ruby中通过点分隔字符串从JSON取值的通用方法

假设我们有test.json文件内容如下:

{
  "this": {
    "is": {
      "string": "value"
    }
  }
}

如果要获取this.is.string对应的值,常规写法是硬编码层级访问:

# 读取JSON文件
json_file = File.open("test.json")
data_from_file = JSON.load(json_file)

# 硬编码层级取值
get_value = data_from_file["this"]["is"]["string"]

但这种写法仅适用于固定层级的路径,当遇到this.is.yet.another.string这类动态或多层级的点分隔路径时,就需要一个通用的实现方式。

通用解决方案

以下方法支持任意层级的点分隔路径,同时兼容数组下标(路径中的数字会自动转为整数):

def get_value(data, query)
  query.split('.').inject(data) do |current_val, key|
    key = key.to_i if current_val.is_a?(Array)
    current_val.fetch(key)
  end
end

# 调用示例
get_value(data_from_file, 'this.is.string')
# => "value"

代码解析

  • query.split('.'):将点分隔的路径拆分为键数组,例如'this.is.string'会被拆分为['this', 'is', 'string']
  • inject(data):以原始JSON数据为初始值,遍历每个键,逐层深入访问数据结构
  • key.to_i if current_val.is_a?(Array):若当前节点是数组,自动将字符串形式的下标转为整数(比如路径'items.2.title'中的2会被转为数组下标)
  • fetch(key):相比直接使用[]访问,fetch在找不到对应键/下标时会抛出KeyError,便于排查问题;也可以传入默认值避免异常,例如current_val.fetch(key, nil)

内容的提问来源于stack exchange,提问作者RaHan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:50:21