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

如何将YAML文件解析为纯key=value字符串?附Ruby初始实现

Hey there! 你的初步逐行处理思路虽然直接,但YAML的语法其实比看起来复杂——比如嵌套结构、不同的字符串引号格式、甚至多行内容,手动正则很容易出问题。不如试试用Ruby自带的Psych库(封装在yaml标准库中)来解析YAML,它能正确处理所有YAML语法,然后我们再把解析后的哈希转换成你要的key=value格式,还能轻松实现提取指定键的需求。

完善后的Ruby实现代码
require 'yaml'

# 加载并解析YAML文件
yaml_data = YAML.load_file('test.yml')

# 递归遍历哈希,将嵌套键转换为点分隔格式,生成key=value对
def flatten_yaml(data, parent_key = '')
  result = []
  data.each do |key, value|
    # 拼接当前层级的键(嵌套键用点分隔,比如test.line1)
    current_key = parent_key.empty? ? key.to_s : "#{parent_key}.#{key}"
    
    if value.is_a?(Hash)
      # 如果值还是哈希,继续递归遍历
      result += flatten_yaml(value, current_key)
    else
      # 清理值的前后引号和多余空格,确保输出纯文本
      cleaned_value = value.to_s.gsub(/\A"|"\Z/, '').strip
      result << "#{current_key}=#{cleaned_value}"
    end
  end
  result
end

# 生成所有key=value对
all_key_values = flatten_yaml(yaml_data)

# (可选)提取指定键:比如只保留test下的所有键和options.item1
target_keys = ['test.line1', 'test.line2', 'test.line3', 'options.item1']
filtered_key_values = all_key_values.select do |line|
  key = line.split('=').first
  target_keys.include?(key)
end

# 输出结果(可选择输出全部或过滤后的内容)
puts "=== 全部key=value结果 ==="
puts all_key_values.join("\n")

puts "\n=== 过滤后的key=value结果 ==="
puts filtered_key_values.join("\n")
代码说明
  1. 依赖标准库:使用Ruby内置的yaml库,无需额外安装gem,能正确解析YAML的嵌套结构、转义字符、多行字符串等复杂语法,避免手动逐行正则的漏洞。
  2. 递归处理嵌套:flatten_yaml方法会递归遍历所有层级的哈希,将嵌套键转换为父键.子键的格式(比如test.line1),符合常规的扁平化键值对需求。
  3. 灵活过滤:通过定义target_keys数组,可以轻松提取你需要的特定键,无需修改核心解析逻辑。
  4. 值清理:自动去除字符串前后的引号和多余空格,确保输出的是纯key=纯文本值格式。
测试输出(对应你的YAML示例)

运行代码后,会得到以下结果:

=== 全部key=value结果 ===
test.line1=line 1 text
test.line2=line 2 text
test.line3=line 3 text
options.item1=item 1 text
options.item2=item 2 text
options.item3=item 3 text

=== 过滤后的key=value结果 ===
test.line1=line 1 text
test.line2=line 2 text
test.line3=line 3 text
options.item1=item 1 text

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:04:13