0
点赞
收藏
分享

微信扫一扫

PG中解析json类型字段的几种方法

云卷云舒xj 2024-06-07 阅读 10

PG中支持字段存储原生的json对象,本文介绍如何解析json类型的字段。

-> 和 ->> 操作符

-> 操作符通过键名访问 JSON 对象,返回JSON类型的结果

->> 操作符通过键名访问 JSON 对象,返回文本类型的结果

# 假设user表的profile字段为json类型,存储的数据如下:

{
  "forms": [
    {
      "name": "客户信息",
      "app_id": "65fe3c153fd1dc7a68300000",
      "entry_id": "65d80f7d698c9e4aa5000000"
    },
    {
      "name": "客户评价",
      "app_id": "65fe3c153fd1dc7a68300000",
      "entry_id": "65d80f91b1f98f7a46400000"
    },
    {
      "name": "项目立项",
      "app_id": "65fe3c153fd1dc7a68300000",
      "entry_id": "65d80fd93773fc7526300000"
    }
  ]
}

# 遍历数组返回标准二维表(图1)
SELECT 
	elem ->> 'name' AS NAME,
	elem ->> 'app_id' AS app_id,
	elem ->> 'entry_id' AS entry_id
FROM users, 
json_array_elements(profile -> 'forms') AS elem;

# 访问数组中的特定元素(比如第3个元素)(图2)
SELECT 
	profile -> 2 AS profile
FROM users;

PG中解析json类型字段的几种方法_JSON

图1

PG中解析json类型字段的几种方法_ci_02

图2

#> 和 #>> 操作符

对于数组或嵌套的 JSON 对象,可以使用 #> 和 #>> 操作符。

#> 用于访问嵌套的键,返回JSON类型的结果

#>> 同样用于访问嵌套键,返回文本类型的结果

# 假设user表的profile字段为json类型,存储的数据如下:

{
  "name": "Alice",
  "email": "alice@example.com",
  "address": {
    "city": "Wonderland",
    "zipcode": "12345"
  }
}

# 提取 email 和 address 中的 city(图3)
SELECT 
	profile ->> 'email' AS email, 
	profile #>> '{address, city}' AS city1
	profile -> 'address' ->> 'city' AS city2
FROM users;

PG中解析json类型字段的几种方法_操作符_03

图3

举报

相关推荐

0 条评论