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

如何在Ruby中解析以符号而非字符串为键的类JSON字符串?

问题原因与解决方案

你提供的字符串并非标准JSON格式,而是Ruby哈希的字面量表示(比如使用=>连接键值、符号类型的键、Ruby原生日期格式),所以直接调用JSON.parse会触发解析错误。

解决方法

方法1:利用Ruby解析哈希后转JSON(来源可信时用)

如果字符串来源安全(比如内部生成),可以用eval将其转为Ruby哈希,再处理:

require 'json'
# 你的类JSON字符串
ruby_hash_str = "{:status=>\"ok\", :hitcount=>\"1\", :request_date=>Wed, 10 Oct 2019 00:00:00 +0000}"
# 转为Ruby哈希
hash = eval(ruby_hash_str)
# 若需要标准JSON字符串,可生成
valid_json = JSON.generate(hash)
# 若直接用Ruby对象,直接操作hash即可

⚠️ 注意:eval会执行字符串中的任意Ruby代码,不可用于处理不可信来源的字符串。

方法2:手动转换为标准JSON(安全通用)

通过字符串替换将非标准格式修正为符合JSON规范的格式:

require 'json'
ruby_hash_str = "{:status=>\"ok\", :hitcount=>\"1\", :request_date=>Wed, 10 Oct 2019 00:00:00 +0000}"
# 1. 将符号键(:key=>)替换为JSON格式的键("key":)
formatted = ruby_hash_str.gsub(/:(\w+)=>/, '"\1":')
# 2. 将日期部分包裹为字符串(JSON要求所有非数值/布尔值的字面量必须是字符串)
formatted = formatted.gsub(/(Wed, \d{2} \w{3} \d{4} \d{2}:\d{2}:\d{2} \+0000)/, '"\1"')
# 现在可以正常解析
parsed_data = JSON.parse(formatted)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:14:53