これは、適切なデータ型を最初から選択することが後で役立つもう1つの良い例です;)
特定のテキストが有効な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;
注意:例外処理のため、これは高速ではありません。多くの無効な値でそれを呼び出すと、選択が大幅に遅くなります。
ただし、両方の'{"products": 1}'
および'{"products": [1,2,3]}'
有効なJSONドキュメントです。前者が無効であるという事実は、JSON構文ではなく、アプリケーションロジックに基づいています。
同様の関数が必要であることを確認するために、json_array_length()
を呼び出すときにエラーをトラップします
create or replace function is_valid_json_array(p_json text, p_element text)
returns boolean
as
$$
begin
return json_array_length( p_json::json -> p_element) >= 0;
exception
when others then
return false;
end;
$$
language plpgsql
immutable;