暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

hubble数据库函数之JSON函数

原创 琳哥 2023-01-31
399
函数 说明 返回值类型
array_to_json(array: anyelement[]) 将数组返回为JSON或JSONB。 json
json_array_length(json: jsonb) → int 返回最外面的JSON或JSONB数组中的元素数。 int
json_build_array(anyelement...) 从可变参数列表中构建一个可能是异构类型的JSON或JSONB数组。 json
json_build_object(anyelement...) 从可变参数列表中构建JSON对象。 json
json_extract_path(jsonb, string...) 返回可变参数所指向的JSON值。 json
json_object(keys: string[], values: string[]) 这种形式的json_object从两个单独的数组中成对地获取键和值。在所有其他方面,它与单参数形式相同。 json
json_object(texts: string[]) 从文本数组构建JSON或JSONB对象。数组必须具有一维且成员数为偶数,在这种情况下,它们被视为交替的键/值对。 json
json_remove_path(val: jsonb, path: string[]) 从JSON对象中删除指定的路径。 json
json_set(val: jsonb, path: string[], to: jsonb) 返回可变参数所指向的JSON值。 json
json_set(val: jsonb, path: string[], to: jsonb, create_missing: bool) 返回可变参数所指向的JSON值。如果create_missing为false,则不会将新键插入对象,也不会在值之前或之后添加值。 json
json_strip_nulls(from_json: jsonb) 返回from_json,其中所有具有空值的对象字段都被省略。其他空值保持不变。 json
json_typeof(val: jsonb) 以文字字串传回最外层JSON值的类型。 string
jsonb_array_length(json: jsonb) 返回最外面的JSON或JSONB数组中的元素数。 int
jsonb_build_array(anyelement...) 从可变参数列表中构建一个可能是异构类型的JSON或JSONB数组。 int
jsonb_build_object(anyelement...) 从可变参数列表中构建JSON对象。 json
jsonb_extract_path(jsonb, string...) 返回可变参数所指向的JSON值。 json
jsonb_insert(target: jsonb, path: string[], new_val: jsonb) 返回可变参数所指向的JSON值。new_val将在路径目标之前插入。 jsonb
jsonb_insert(target: jsonb, path: string[], new_val: jsonb, insert_after: bool) 返回可变参数所指向的JSON值。如果insert_after为true(默认为false),new_val则将在路径目标之后插入。 jsonb
jsonb_object(keys: string[], values: string[]) 这种形式的json_object从两个单独的数组中成对地获取键和值。在所有其他方面,它与单参数形式相同。 jsonb
jsonb_object(texts: string[]) 从文本数组构建JSON或JSONB对象。数组必须具有一维且成员数为偶数,在这种情况下,它们被视为交替的键/值对。 jsonb
jsonb_pretty(val: jsonb) 以缩进和换行符的形式返回给定的JSON值。 string
jsonb_set(val: jsonb, path: string[], to: jsonb) 返回可变参数所指向的JSON值。 jsonb
jsonb_set(val: jsonb, path: string[], to: jsonb, create_missing: bool) 返回可变参数所指向的JSON值。如果create_missing为false,则不会将新键插入对象,也不会在值之前或之后添加值。 jsonb
jsonb_strip_nulls(from_json: jsonb) 返回from_json,其中所有具有空值的对象字段都被省略。其他空值保持不变。 jsonb
jsonb_typeof(val: jsonb) 以文字字串传回最外层JSON值的类型。 string
to_json(val: anyelement) 以JSON或JSONB的形式返回值。 json
to_jsonb(val: anyelement) 以JSON或JSONB的形式返回值。 jsonb
  • to_json
select to_json('json type'::text);
    to_json
---------------
  "json type"
  • to_jsonb
select to_jsonb('json type'::text);
    to_jsonb
---------------
  "json type"
  • json_array_length
SELECT json_array_length('[1,2,3,4]');
  json_array_length
---------------------
                  4
  • json_build_array
select json_build_array(1,2,'3',4,5);
  json_build_array
---------------------
  [1, 2, "3", 4, 5]
  • json_build_object
select json_build_object('1','2','3','4')
   json_build_object
------------------------
  {"1": "2", "3": "4"}

  • jsonb_pretty

数据准备

CREATE TABLE reports (rep_id int primary key, data json); INSERT INTO reports (rep_id, data) VALUES (1, '{"objects":[{"album": 1, "src":"fooA.png", "pos": "top"}, {"album": 2, "src":"barB.png", "pos": "top"}], "background":"background.png"}') , (2, '{"objects":[{"album": 1, "src":"fooA.png", "pos": "top"}, {"album": 2, "src":"barC.png", "pos": "top"}], "background":"bacakground.png"}') , (3, '{"objects":[{"album": 1, "src":"fooA.png", "pos": "middle"},{"album": 2, "src":"barB.png", "pos": "middle"}],"background":"background.png"}') , (4, '{"objects":[{"album": 1, "src":"fooA.png", "pos": "top"}, {"album": 3, "src":"barB.png", "pos": "top"}], "background":"backgroundA.png"}') ;
select jsonb_pretty( '{"name": "Alice", "agent": {"bot": true} }'::jsonb );
     jsonb_pretty
-----------------------
  {
      "agent": {
          "bot": true
      },
      "name": "Alice"
  }
  • json_object_keys

返回最外层的json对象中的键的集合

select * from json_object_keys('{"b":"1","a":"2"}');
  json_object_keys
--------------------
  a
  b
  • jsonb_set

json值的更新,jsonb_set函数,格式:jsonb_set(target jsonb,path text[],new_value jsonb[, create_missing boolean])target指源jsonb数据,path指路径,new_value指更新后的键值,create_missing值为true表示键不存在则添加,为false表示如果键不存在则不添加。

select jsonb_set('{"name":"bob","age":"27"}'::jsonb,'{age}','"28"'::jsonb,false);
           jsonb_set
--------------------------------
  {"age": "28", "name": "bob"}
  • json_each

扩展最外层的json对象成为一组键值结果集

select * from json_each('{"b":"1","a":"2"}');
  key | value
------+--------
  a   | "2"
  b   | "1"
  • json_each_text以文本返回结果
select * from json_each_text('{"b":"1","a":"2"}');
  key | value
------+--------
  a   | 2
  b   | 1
  • json_object_keys

返回最外层的json对象中的键的集合

select * from json_object_keys('{"b":"1","a":"2"}');
  json_object_keys
--------------------
  a
  b
  • json_typeof

以文字字串传回最外层JSON值的类型

select * from json_typeof('{"b":"1","a":"2"}');
  json_typeof
---------------
  object
  • json键值的删除用-
select '{"b":"1","a":"2"}'::json - 'a';
   column
--------------
  {"b": "1"}
  • 删除嵌套json数据
select '["a","b","c"]'::jsonb - 0;
  column  
------------
 ["b", "c"]
select '["a","b","c"]'::jsonb - 1;
  column  
------------
 ["a", "c"]
  • json_strip_nulls
select json_strip_nulls('[{"f1":1,"f2":null},2,null,3]');
     json_strip_nulls
---------------------------
  [{"f1": 1}, 2, null, 3]
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论