json - 给定类型名称的类型转换

标签 json postgresql

我有这个 json 结构,我还存储了一个 PostgreSQL 类型名称

{  
   "temperature":{  
      "value":"(-75,-70]",
      "type":"int4range"
   }
}

我可以得到这样的值

SELECT '{"temperature":{"value":"(-75,-70]","type":"int4range"}}'::jsonb #> ARRAY['temperature','value']

现在值类型是文本,我知道我只能在 json 中存储简单类型,但我如何使用我拥有的类型名称动态地将值转换为 int4range

最佳答案

正如@Bread 所说,你不能动态转换数据。

但是你可以这样做:

WITH jsonb as (
    SELECT '{"temperature":{"value":"[-75,-70]","type":"int4range"}}'::json
), fromjsonb as (
    SELECT json->'temperature'->'value' as element,
           json->'temperature'->'type' as type
    FROM jsonb
), trim as (
    SELECT trim(both '"' from element::text) as element,
           trim(both '"' from type::text) as type
    FROM fromjsonb
)
SELECT CASE WHEN type = 'int4range' THEN element::int4range
            -- ELSE element::text
            END
FROM trim;

   case    
-----------
 [-75,-69)
(1 row)

在我的示例中,它选择了数据,但它无法工作,因为 PostgreSQL 不会让您选择第一行作为 int4range,然后选择下一行作为另一种类型。

但是您可以使用相同的逻辑将数据插入到另一个表中(我假设这是您的目标)并且这会奏效。

关于json - 给定类型名称的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42728703/

相关文章:

sql - POSTGRESQL,无子查询 : subquery in FROM must have an alias

json - 从 OSX 上的媒体文件元数据解析 JSON 值

node.js - 如何从数据库中清除过期的 token ?

ruby-on-rails - Postgres - 每天随机化一次结果

python - 如何在 Django 中将 Http Post 参数的 Json 值转换为 Python Dict?

postgresql - OCaml:将数据序列化为具有附加要求的字符串

php - 将嵌套行与动态 ORDER BY 和 LIMIT/分页保持在一起

python - 循环在两个字典中查找匹配值

python - 无法解码 JSON 对象,但输入为 JSON 格式

python - 将带有 `\` 的字符串转换为 json 或字典数据