【问题标题】:Eliminate double quotes from a json field in a selective manner in PostgreSQL在PostgreSQL中以选择性方式消除json字段中的双引号
【发布时间】:2020-10-23 14:43:10
【问题描述】:

我是 PostgreSQL 数据库的新用户,该数据库的 json 字段给我带来了一些麻烦。 事实上,当字符串值应该是数值时,已经用双引号将字符串值插入到这个json文件中。

我有一个名为“test_json”的字段,例如由以下两行组成:

{"test_name": "Full", "parameter1": "4.219", "parameter2": 4.4137}
{"test_name": "Full", "parameter1": "3.758", "parameter2": 4.159} 

我希望上面的 2 行以这种形式更正后:

{"test_name": "Full", "parameter1": 4.219, "parameter2": 4.4137}
{"test_name": "Full", "parameter1": 3.758, "parameter2": 4.159}

我想更正这些值而不必删除所有内容,我无法手动更正它,因为有数以万计的“parameter1”值。 你能帮我更正一下吗?

我只想删除此参数 1 的双引号,以防它不是数字。

我发现所有具有这个非数字参数1的行都带有:

select *
    from t_test_result
   where jsonb_typeof (t_test_result.test_json -> ' parameter1') <> 'number'
     and t_test_result.test_json ? 'parameter1'

而且我想我之后必须使用更新功能,但我无法管理它......

谢谢!

弗兰克

【问题讨论】:

    标签: sql json string postgresql


    【解决方案1】:

    您可以使用jsonb_set() 转改变attribyte parameter1 的值的数据类型:

    update t_test_result
    set test_json = jsonb_set(
        test_json, 
        '{parameter1}', 
        to_jsonb((test_json ->> 'parameter1')::numeric)
    )
    where test_json ? 'parameter1'
    

    Demo on DB Fiddle

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 2020-07-27
      • 2015-07-15
      • 1970-01-01
      • 2015-02-13
      • 2017-05-04
      相关资源
      最近更新 更多