在postgres中使用SQL,我想知道一个JSON是否在另一个JSON中。
例如:
json_1 = {"a": ["123"], "b": ["456", "789"]}
json_2 = {"a": ["123"], "b": ["456"]}
在上述情况下,json_2 [“ a”]位于json_1 [“ a”]中,而json_2 [“ b”]位于json_1 [“ b”]中。
如果我知道json的所有可能键,则可以轻松地为每个键编写以上内容。但是,问题是我不知道JSON中有多少个键和哪些键。如果json_2位于json_1中,如何检查JSON中的每个键?
答案 0 :(得分:0)
我不确定所需的输出格式,但这将为每个键创建一行,并带有一个布尔值,指示json_2键的数组值是否包含在json_1键的值中。
CREATE TABLE t (json_1 JSONB, json_2 JSONB);
INSERT INTO t
VALUES
('{"a":["123"],"b":["456","789","aaa"],"c":["999"],"d":[]}',
'{"a":["123"],"b":["789","456"],"c":["123"],"d":["x"]}');
查询#1
SELECT key, value <@ (json_1->key) AS contained
FROM (
SELECT (JSONB_EACH(json_2)).*, json_1
FROM t
) j;
返回:
| key | contained |
| --- | --------- |
| a | true |
| b | true |
| c | false |
| d | false |