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

如何从含转义字符的嵌套哈希提取键值并生成表头表格

解决Ruby哈希提取键值对并生成表格的问题

我看你遇到的问题主要出在几个细节上:没处理json_hash[:results]里的JSON字符串、目标键的层级不对,还有遍历的对象搞错了。咱们一步步来修正:

核心问题分析

你当前的json_hash[:results]里存的是JSON格式的字符串,不是直接的Ruby哈希,所以直接用select肯定抓不到值;另外instanceType是在configuration这个子哈希里,不是顶层键,keys_to_extract直接写它也找不到。还有你对整个json_hash调用map,而json_hash是个哈希,map会遍历它的键值对(比如:results、:query_info这些),这完全不是你要操作的对象。

修正后的代码步骤

1. 解析JSON字符串为Ruby哈希

首先得把results数组里的JSON字符串转成Ruby哈希,用JSON.parse处理:

require 'json'

json_hash = {:results=>["{\"resourceId\":\"i-5ee33\",\"configuration\":{\"instanceType\":\"m4.2xlarge\"},\"tags\":[{\"tag\":\"aws:au\\u003db\",\"value\":\"b-1a\",\"key\":\"awsss\"},{\"tag\":\"Kernluster\\ulues\",\"value\":\"blu\",\"key\":\"Kster\"},{\"tag\":\"Kuole\\udter\",\"value\":\"master\",\"key\":\"Kule\"},{\"tag\":\"Name\\uwest-1a\",\"value\":\"st-1a\",\"key\":\"Name\"}]}"], :query_info=>{:select_fields=>[{:name=>"[FILTERED]"}, {:name=>"[FILTERED]"}, {:name=>"[FILTERED]"}]}, :next_token=>"YwutZrD0Ow9Qh3HoYbiC"}

# 解析results里的JSON字符串为Ruby哈希
parsed_result = JSON.parse(json_hash[:results].first)

2. 提取目标键值对

因为instanceType在configuration下,所以要单独提取它,然后把所有需要的字段整理到一个新哈希里:

# 提取需要的字段
extracted_data = {
  'resourceId' => parsed_result['resourceId'],
  'instanceType' => parsed_result.dig('configuration', 'instanceType'),
  'tags' => parsed_result['tags']
}

这里用dig方法可以安全地获取嵌套哈希的值,如果某个层级不存在也不会报错,比直接parsed_result['configuration']['instanceType']更稳妥。

3. 生成表格(以键为列标题)

如果是要输出Markdown格式的表格,我们可以把提取的数据整理成表格结构:

# 生成Markdown表格
table_header = extracted_data.keys.join(' | ')
table_separator = extracted_data.keys.map { '---' }.join(' | ')
# 处理tags字段,把数组转成可读性好的字符串
table_row = extracted_data.values.map do |val|
  val.is_a?(Array) ? val.map { |tag| "#{tag['key']}: #{tag['value']}" }.join('<br>') : val
end.join(' | ')

markdown_table = <<~TABLE
| #{table_header} |
| #{table_separator} |
| #{table_row} |
TABLE

puts markdown_table

完整运行结果

运行上面的代码后,会输出如下Markdown表格:

resourceIdinstanceTypetags
i-5ee33m4.2xlargeawsss: b-1a
Kster: blu
Kule: master
Name: st-1a

如果你需要生成其他格式的表格(比如终端里的ASCII表格),可以调整最后一步的输出逻辑,但核心的提取步骤是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:50:06