json - 如何验证字符串是 PostgreSQL 中的有效 JSON?

标签 json postgresql types

我有一个大型数据库,其中包含用 JSON 编写的分析数据。

我想过滤掉数据不正确的行:

  • 无效的 JSON(有些行有类似的东西:'{"hello": "world'
  • 一些属性不是数组,所以它需要 '{"products": [1,2,3]}' 并且会省略 '{"products": 1} '

我想做这样的事情:

select * 
from analytics 
where (is_correct_json(json::json)) 
and (is_array(json::json->>'products'))

我怎样才能做到这一点?

最佳答案

这是另一个很好的例子,为什么从一开始就选择合适的数据类型对以后有帮助 ;)

没有用于检查给定文本是否为有效 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;

关于json - 如何验证字符串是 PostgreSQL 中的有效 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30187554/

相关文章:

java - 在@RequestBody 中使用 spring 转换器

javascript - 返回未定义的 jQuery JSON

haskell - 在生产中使用索引单子(monad)的经验报告?

java - 在 Spring Controller 中从文件 (JSONObject) 返回模拟的 JSON

jquery - Coldfusion 9 JSON解析错误

python - 从 Django 调用 Postgres SQL 存储过程

java - 错误 : column "id" is of type uuid but expression is of type bytea

java - Hibernate 一对一单向主键 XML 映射

function - 这个Go函数类型 "HandlerFunc"是怎么工作的,来自标准库 "net/http"

Scala 类型参数重复