【问题标题】:JSON (not jsonb column) column merge for multiple objects in rails轨道中多个对象的 JSON(不是 jsonb 列)列合并
【发布时间】:2019-05-29 20:10:30
【问题描述】:

最初我有 JSON 哈希值,例如, a = {“1”:1,“2”:2}。 (初始 json 哈希)

现在我需要将新的键值对添加到 json 哈希中 { "3": 3 }.( 新的哈希密钥对)

合并新值后,我的哈希看起来像 a = {“1”:1,“2”:2,“3”:3}。 (结果json哈希)

Can you please share your logic for satisfying the above conditions for multiple objects?

 Note: 1. My column is not a jsonb. It's a json column. 
       2. I am using the postsgres database.
       3. Merge the key-value pair to multiple objects columns.

【问题讨论】:

  • 你的 PostgreSQL 版本是多少?

标签: ruby-on-rails json postgresql


【解决方案1】:

这很简单。我们可以利用 ruby​​ 语法merge 来得到预期的结果。

a = { "1": 1, "2": 2 }
b = { "3": 3 }
result = a.merge(b) # will give you { "1": 1, "2": 2, "3": 3 }

【讨论】:

    【解决方案2】:

    如果您使用的是 Postgres 9.5+,您可以将其转换为 jsonb 并使用 || 将其连接起来。运算符,然后将其转换为 json 类型。

    UPDATE t 
        SET    json_col = (json_col ::jsonb ||  '{ "3": 3 }' ::jsonb)::json;
    

    对于旧版本,您可能需要将其转换为文本组合并进行一些操作以转换为json 类型。

    UPDATE t 
        SET    json_col = ( replace(json_col :: text, '}', ',') 
                || replace('{ "3": 3 }', '{', '' ) ) :: json ;
    

    Demo

    【讨论】:

      猜你喜欢
      • 2016-11-25
      • 2016-09-14
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多