如果非负数值有加号,则不能转换为 jsonb

cannot cast to jsonb if non-negative numeric vlaue have plus sign

以下命令有效

select '[0,1, -2,  -0.3444, 5.6]'::jsonb;

但是以下 3 个不工作。

select '[0,1, -2,  (+0.3444), 5.6]'::jsonb;
select '[0,1, -2,  +0.3444, 5.6]'::jsonb;
select '[0,1, -2,  +0, 5.6]'::jsonb;

下面的工作。

select +0.1;
select (+0.1)::text;

第一个工作示例是包含有效 JSON 文档的字符串被转换为 JSONB;其他包含有效的 PostgreSQL 算术表达式。

non-working 示例再次将字符串转换为 JSONB,但字符串包含 invalid JSON 表达式,因此不能被解析为 JSON。如果你看一下 JSON grammar, number is integer fraction exponent, and integer can have digits that optionally start with -. The sign + is not allowed in JSON. The parentheses are not allowed, either. You can verify this e.g. using JSON validator.