簡體   English   中英

從Postgres中的Json數組對象獲取值

[英]Fetching Value from Json Array Object in Postgres

我是Postgres的新手,所以在創建查詢時遇到了麻煩。

表定義:

id - primary key,
data - JSON

樣本數據:

id       data
--------------------------------------------------------------
1           [{"279863":"500040004","awb_no":"18171917033930"},{"279864":"500040003","awb_no":"18171917033931"}]

我想使用where子句在我的數據列中找到鍵(279864)存在

t=# with c(id,data) as (values(1,'[{"279863":"500040004","awb_no":"18171917033930"},{"279864":"500040003","awb_no":"18171917033931"}]'::json))
select id,json_object_keys(json_array_elements(data)) = '279864' from c;
 id | ?column?
----+----------
  1 | f
  1 | f
  1 | t
  1 | f
(4 rows)

因此您可以使用WHERE EXISTScount(*) > 0或您喜歡的任何其他方式進行檢查...

例如, 使用 bool_or (如果至少一個為true,則group為true):

t=# with c(id,data) as (values(1,'[{"279863":"500040004","awb_no":"18171917033930"},{"279864":"500040003","awb_no":"18171917033931"}]'::json))
, m as (select id,(json_object_keys(json_array_elements(data)) = '279864')j from c)
select id, bool_or(j) from m group by id;
 id | bool_or
----+---------
  1 | t
(1 row)

簡而言之:

  1. 使用json_array_elements划分數組進行檢查。
  2. 使用json_object_keys分割數組元素的鍵
  3. 使用bool_or檢查至少一個鍵是否類似於模式

更新為OP是要求“不太復雜”的解決方案,我發布一個猴子入侵,以及:

t=# with c(id,data) as (values(1,'[{"279863":"500040004","awb_no":"18171917033930"},{"279864":"500040003","awb_no":"18171917033931"}]'::json))
select * from c where data::jsonb::text ~ '(,)|({ )"279863":';
 id |                                                data
----+-----------------------------------------------------------------------------------------------------
  1 | [{"279863":"500040004","awb_no":"18171917033930"},{"279864":"500040003","awb_no":"18171917033931"}]
(1 row)

這當然很滑,也需要一些解釋:

  1. 我需要先轉換為jsonb以消除可能的語法自由
  2. JSON對象鍵進行排序,因此,我需要她倆{ {和,案件

將數據列設置為JSONB ,然后可以使用以下命令輕松完成操作:

SELECT * FROM table WHERE data->>'279863' IS NOT NULL;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM