【问题标题】:Turn results of a raw SQL query to JSON (and CSV)将原始 SQL 查询的结果转换为 JSON(和 CSV)
【发布时间】:2014-01-15 18:43:14
【问题描述】:

我需要从旧版 SQL Server 数据库中提取数据并将其转换为 JSON。我已经编写了 SQL 查询(对于我正在替换的旧版报告),这些查询准确地提取了我需要的内容。

将 ActiveRecord 对象转换为 JSON(和 CSV)当然很容易,但我没有看到任何好的方法来做我需要做的事情,因为所有涉及原始 SQL 的 ActiveRecord 方法似乎都旨在返回ActiveRecord 对象,并且这些数据在逻辑上不一定对应于一个类,我不需要将它持久化到任何其他地方。我只想执行 SQL 查询并返回 JSON 和 CSV 并完成它。

【问题讨论】:

  • 如果你不做rails,ruby 有一个成熟的csv 库和一个成熟的json 库,它们非常简单
  • 如果您的查询返回一个活动记录对象的列表/数组(我认为它应该这样做),那么您只需对列表中的每个元素调用 attributes 方法将其转换为您现在可以轻松转换为 JSON 或 CSV 的哈希,或者您可以直接在 activerecord 对象上调用 to_json,它会变成一个 json 对象
  • 我已移动 this discussion to chat。让我们在这里删除 cmets。

标签: ruby-on-rails ruby activerecord sequel ruby-datamapper


【解决方案1】:

在您的控制器中,您可以添加:

render json: @result 

render :json => @result

这将呈现如下内容: {id: 1, name: "user name", color: "red"}

【讨论】:

    【解决方案2】:

    我推荐sequel

    来自Querying with Sequel

    require 'sequel'
    
    DB = Sequel.connect # database information goes here
    
    class Thing < Sequel::Model
    end
    
    result_objects = DB["SELECT * FROM things"].all
    

    然后简单地将 result_objects 解析成 JSON:

    require 'json'
    
    hashes = result_objects.collect { |ro|
      ro.to_hash
    }
    
    JSON.generate(hashes)
    

    【讨论】:

    • 我研究过使用 Sequel,但我找不到任何让它与 MS SQL 一起工作的东西。你能指出我正确的方向吗?
    • This page 提供了有关使用各种适配器连接到您选择的数据库的说明。跳转到“tinytds”部分;这似乎是一个适用于 SQL Server 的适配器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2011-06-26
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    相关资源
    最近更新 更多