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

Ruby如何不使用gsub解析包含嵌套JSON字符串的对象

Ruby嵌套JSON字符串解析方案

无需使用gsub替换引号,直接借助Ruby标准库json做二次解析即可实现需求,操作如下:

前置准备

首先引入Ruby自带的JSON解析库,无需安装额外依赖:

require 'json'

单字段场景处理(匹配示例数据)

针对你提供的示例数据,处理流程代码如下:

# 假设你拿到的原始JSON字符串如下
raw_json = '{"Name":"{\"FirstName\":\"Douglas\",\"LastName\":\"Crockford\"}"}'
# 第一步:解析外层JSON得到第一层结构
outer_obj = JSON.parse(raw_json, symbolize_names: true)
# 第二步:单独解析Name字段对应的嵌套JSON字符串
outer_obj[:Name] = JSON.parse(outer_obj[:Name], symbolize_names: true)
# 此时outer_obj已得到目标结构:{:Name=>{:FirstName=>"Douglas", :LastName=>"Crockford"}}

多字段/嵌套层级不确定场景的通用处理

如果存在多个字段都是嵌套JSON字符串,或嵌套层级不固定,可以用递归方法做自动处理:

def parse_nested_json(obj)
  case obj
  when Hash
    obj.transform_values { |val| parse_nested_json(val) }
  when Array
    obj.map { |val| parse_nested_json(val) }
  when String
    begin
      parsed_val = JSON.parse(obj, symbolize_names: true)
      # 仅当解析结果为Hash/Array时返回解析值,避免纯数字、普通字符串被误转换
      parsed_val.is_a?(Hash) || parsed_val.is_a?(Array) ? parsed_val : obj
    rescue JSON::ParserError
      # 不是合法JSON的字符串直接返回原值
      obj
    end
  else
    obj
  end
end

# 调用方法:直接传入外层解析后的对象即可
final_obj = parse_nested_json(JSON.parse(raw_json, symbolize_names: true))

说明

  • 所有转义字符的处理逻辑都由标准JSON库实现,比手动替换引号的方案兼容性更高,不会出现边界场景的解析错误。
  • 参数symbolize_names: true可按需选择,不加时解析出的键为字符串类型,加后为Symbol类型,匹配你给出的目标结构格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:42:01