相关疑难解决方法(0)

如何将postgres json转换为整数

我可以使用to_json(1)将int转换为json,但是如何将json转换为int?这可能太慢了:

to_json(1)::text::int
Run Code Online (Sandbox Code Playgroud)

另外,json是从二进制块(bson)还是简单的文本包装器中包装的?

postgresql json

33
推荐指数
3
解决办法
3万
查看次数

如何将PostgreSQL 9.4的jsonb类型转换为float

我正在尝试以下查询:

SELECT (json_data->'position'->'lat') + 1.0 AS lat FROM updates LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

(+ 1.0只是强制转换为浮点数.我的实际查询要复杂得多,这个查询只是问题的一个测试用例.)

我收到错误:

ERROR:  operator does not exist: jsonb + numeric
Run Code Online (Sandbox Code Playgroud)

如果我添加显式转换:

SELECT (json_data->'position'->'lat')::float + 1.0 AS lat FROM updates LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

错误变成:

ERROR:  operator does not exist: jsonb + double precesion
Run Code Online (Sandbox Code Playgroud)

我知道大多数jsonb值都不能转换成浮点数,但在这种情况下我知道lats都是JSON数.

是否有一个函数将jsonb值转换为浮点数(或为uncastable返回NULL)?

sql postgresql casting jsonb postgresql-9.4

33
推荐指数
5
解决办法
4万
查看次数

在postgresql中,如何在jsonb键上返回布尔值而不是字符串?

在下面的查询中,$ isComplete和$ isValid作为字符串返回.但是,它们保存为布尔值.如何获取要返回的这些字段的布尔表示?

query =
    "SELECT
        data #>> '{id}' AS id,
        data #>> '{name}' AS name,
        data #>> '{curator}' AS curator,
        data #>  '{$isValid}' as \"$isValid\",
        data #>  '{customer}' as customer,
        data #>  '{$createdTS}' as \"$createdTS\",
        data #>  '{$updatedTS}' as \"$updatedTS\",
        data #>  '{$isComplete}' as \"$isComplete\",
        (count(keys))::numeric as \"numProducts\"
    FROM
      appointment_intakes,
      LATERAL jsonb_object_keys(data #> '{products}') keys
    GROUP BY id"
Run Code Online (Sandbox Code Playgroud)

postgresql json jsonb

16
推荐指数
1
解决办法
9846
查看次数

PostgreSQL unescape JSON字符串

我正在尝试在PostgreSQL 9.3中使用新的JSON功能,而我正在寻找一种能够使用JSON的功能,即to_json(anyelement)的对话.

以下是JSON示例:

{"single_comment": "Fred said \"Hi.\"" , 
"comments_array": ["Fred said \"Hi.\"", "Fred said \"Hi.\"", "Fred said \"Hi.\""]}  
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT json_array_elements(json_column->'comments_array')
Run Code Online (Sandbox Code Playgroud)

返回文档中描述的SET OF JSON.

"Fred said \"Hi.\""
"Fred said \"Hi.\""
"Fred said \"Hi.\""
Run Code Online (Sandbox Code Playgroud)

有没有办法取消结果,所以我可以得到以下结果:

Fred said "Hi."
Fred said "Hi."
Fred said "Hi." 
Run Code Online (Sandbox Code Playgroud)

在文档中,我没有看到任何可以帮助我的功能.不幸的是,对我来说,不能选择PLV8.

任何想法都受到高度赞赏.

postgresql json

7
推荐指数
2
解决办法
3029
查看次数

从JSON中提取int,string,boolean等作为其对应的PostgreSQL类型

我觉得我必须在这里错过一些简单的东西,但是我已经查看了PostgreSQL关于JSON和JSON运算符和函数的文档,并没有看到任何解释它的东西.

在PostgreSQL中很容易将事物变成JSON:

SELECT *, pg_typeof(j) FROM (VALUES
(to_json(5)),
(to_json(true)),
(to_json('foo'::TEXT))
) x (j);
Run Code Online (Sandbox Code Playgroud)

会给我一个很好的jsons 结果集:

   j   | pg_typeof
-------+-----------
 5     | json
 true  | json
 "foo" | json
Run Code Online (Sandbox Code Playgroud)

但是,如何将这些json值转换原始类型?当然,我不希望能够在一个结果集中完成所有操作,因为类型不一致.我只是个人意思.

我尝试了很多东西

铸造肯定不起作用:

SELECT to_json(5)::NUMERIC;
Run Code Online (Sandbox Code Playgroud)

ERROR:  cannot cast type json to numeric
Run Code Online (Sandbox Code Playgroud)

如果我试图滥用这样的json_populate_record功能:

SELECT json_populate_record(null::INTEGER, to_json(5));
Run Code Online (Sandbox Code Playgroud)

我明白了

ERROR:  first argument of json_populate_record must be a row type
Run Code Online (Sandbox Code Playgroud)

在PG 9.4中,我可以很容易地告诉类型:SELECT json_typeof(to_json(5));give number,但这并没有帮助我实际提取它.

也不json_to_record(也是9.4):

SELECT * FROM json_to_record(to_json(5)) x (i …
Run Code Online (Sandbox Code Playgroud)

postgresql json

6
推荐指数
1
解决办法
7816
查看次数

如何将JSON数组转换为文本数组?

此解决方法不起作用

CREATE FUNCTION json_array_castext(json) RETURNS text[] AS $f$
  SELECT array_agg(x::text) FROM json_array_elements($1) t(x);
$f$ LANGUAGE sql IMMUTABLE;

-- Problem:
SELECT 'hello'='hello';  -- true...
SELECT  (json_array_castext('["hello","world"]'))[1] = 'hello'; -- false!
Run Code Online (Sandbox Code Playgroud)

那么,如何获取文本的真实数组?

PS:使用所谓的“头等公民” JSONb,同样的问题。


编辑:@OtoShavadze好的答案(注释已解决!)之后,PostgreSQL开发人员清单为什么x::text进行强制转换(使用第9.5.6页),为什么它不生成警告或错误?

arrays postgresql json

6
推荐指数
2
解决办法
3887
查看次数

在PostgreSQL中,如何将json字符串解包到文本中?

假设我有一个类型的值json,比方说y.例如,可以通过obj->'key'返回类型值的任何函数来获得这样的值json.

当转换为此值时,该值text包括引号, "y"代替y.在使用json类型是不可避免的情况下,这会产生问题,特别是当我们希望将值与文字字符串进行比较时,例如

select foo(x)='bar';
Run Code Online (Sandbox Code Playgroud)

API头脑风暴页面提示一个from_json将智能解开JSON字符串的函数,但我怀疑这是尚未提供.与此同时,如何在没有引号的情况下将JSON字符串转换为文本?

postgresql

3
推荐指数
2
解决办法
3007
查看次数

标签 统计

postgresql ×7

json ×5

jsonb ×2

arrays ×1

casting ×1

postgresql-9.4 ×1

sql ×1