如何通过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
相关产品推荐
相关产品推荐

