| 
                         另外,jsonb类型会去掉输入数据中键值的空格,如下所示: 
- mydb=> SELECT ' {"id":1, "name":"francs"}'::jsonb;  
 - jsonb  
 - -----------------------------  
 - {"id": 1, "name": "francs"}  
 - (1 row) 
 
  
上例中id键与name键输入时是有空格的,输出显示空格键被删除,而json的输出和输入一样,不会删掉空格键: 
- mydb=> SELECT ' {"id":1, "name":"francs"}'::json; 
 - json 
 - ------------------------------- 
 - {"id":1, "name":"francs"} 
 - (1 row) 
 
  
另外,jsonb会删除重复的键,仅保留最后一个,如下所示: 
- mydb=> SELECT ' {"id":1,  
 - "name":"francs",  
 - "remark":"a good guy!",  
 - "name":"test"  
 - }'::jsonb;  
 - jsonb  
 - ----------------------------------------------------  
 - {"id": 1, "name": "test", "remark": "a good guy!"}  
 - (1 row) 
 
  
上面name键重复,仅保留最后一个name键的值,而json数据类型会保留重复的键值。 
相比json大多数应用场景建议使用jsonb,除非有特殊的需求,比如对json的键顺序有特殊的要求。 
4、JSONB与JSON操作符 
PostgreSQL支持丰富的JSONB和JSON的操作符,举例如下: 
以文本格式返回json类型的字段键值可以使用->>符,如下所示: 
字符串是否作为顶层键值,如下所示: 
- mydb=> SELECT '{"a":1, "b":2}'::jsonb ? 'a';  
 - t  
 - (1 row) 
 
  
删除json数据的键/值,如下所示: 
- mydb=> SELECT '{"a":1, "b":2}'::jsonb - 'a';  
 - {"b": 2}  
 - (1 row) 
 
  
5、JSONB与JSON函数 
json与jsonb相关的函数非常丰富,举例如下: 
扩展最外层的json对象成为一组键/值结果集,如下所示: 
- mydb=> SELECT * FROM json_each('{"a":"foo", "b":"bar"}');  
 - key | value  
 - -----+-------  
 - a | "foo"  
 - b | "bar"  
 - (2 rows) 
 
  
以文本形式返回结果,如下所示: 
- mydb=> SELECT * FROM json_each_text('{"a":"foo", "b":"bar"}');  
 - a | foo  
 - b | bar  
 - (2 rows) 
 
  
一个非常重要的函数为row_to_json函数,能够将行作为json对象返回,此函数常用来生成json测试数据,比如将一个普通表转换成json类型表: 
- mydb=> SELECT * FROM test_copy WHERE id=1;  
 - id | name  
 - ----+------  
 - 1 | a  
 - (1 row)  
 - mydb=> SELECT row_to_json(test_copy) FROM test_copy WHERE id=1;  
 - row_to_json  
 - ---------------------  
 - {"id":1,"name":"a"}  
 - (1 row) 
 
  
返回最外层的json对像中的键的集合,如下所示: 
- mydb=> SELECT * FROM json_object_keys('{"a":"foo", "b":"bar"}');  
 - json_object_keys  
 - ------------------  
 - a  
 - b  
 - (2 rows) 
 
  
6、jsonb键/值的追加、删除、更新                         (编辑:滁州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |