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

如何通过jBuilder模板生成Hash而非JSON字符串?

如何让jBuilder从模板生成Hash而非JSON字符串

你可以直接利用Jbuilder对象的原生API获取模板生成的Hash,无需先渲染成JSON字符串再解析,具体实现如下:

核心实现方式

实例化Jbuilder对象,将模板渲染到该对象的上下文里,最后调用attributes!方法即可拿到对应的Hash:

# 在控制器或目标代码块中执行
builder = Jbuilder.new do |json|
  render_to_string(
    template: "foo",
    locals: { json: json },
    formats: [:json],
    handlers: [:jbuilder]
  )
end
result_hash = builder.attributes!
# result_hash 的值为 { foo: "bar" }

封装成复用方法

如果需要多次使用,可以封装成一个辅助方法:

def render_jbuilder_to_hash(template_path, locals = {})
  builder = Jbuilder.new do |json|
    render_to_string(
      template: template_path,
      locals: locals.merge(json: json),
      formats: [:json],
      handlers: [:jbuilder]
    )
  end
  builder.attributes!
end

# 调用示例
my_data_hash = render_jbuilder_to_hash("foo")

这种方式跳过了JSON序列化和反序列化的冗余步骤,直接获取Jbuilder构建过程中的Hash结构,效率比先渲染字符串再解析高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:35:45