【问题标题】:Check is data in field a valid JSON检查字段中的数据是否为有效的 JSON
【发布时间】:2021-02-10 11:11:44
【问题描述】:

我在列中有文本字段 (varchar),可以只是文本或一些 JSON。 如何提取值为 JSON 的所有字段并跳过文本?

【问题讨论】:

标签: sql json postgresql


【解决方案1】:

我认为您可以简单地使用 ISJSON 内置函数来测试列值。

它会返回 0 或 1。你可以在 where 子句中使用它。

【讨论】:

  • Postgres 中没有isjson() 函数
  • 抱歉没有意识到它是针对 PosgresSQL 的。
【解决方案2】:

使用@a_horse_with_no_name 提供的函数is_valid_json ...

create or replace function is_valid_json(p_json text) returns boolean
as $$
begin
  return (p_json::json is not null);
exception 
  when others then
     return false;  
end; $$ language plpgsql immutable;

...您可以在提取 json 元素之前过滤您的记录,例如

数据样本

CREATE TEMPORARY TABLE t (txt text);
INSERT INTO t VALUES ('no json'),('{"foo": "bar"}'),('no json');

过滤有效的json对象并用json_object_keys提取键:

SELECT * FROM (
  SELECT json_object_keys(txt::json) FROM t
  WHERE is_valid_json(txt)) q;

 json_object_keys 
------------------
 foo

【讨论】:

    猜你喜欢
    • 2020-12-20
    • 2022-01-19
    • 2020-03-07
    • 2013-02-13
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多