json数组与怎么在Postgresql中使用

  

json数组与怎么在Postgresql中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

json的两种格式

总结:json输入快,处理慢。是精准拷贝,所以能准确存储遗留对象的原格式,如对象键顺序.jsonb输入慢,处理快。会被重新解析成json数据,不保存原对象的键顺序,并且去重相同的键值,以最后一个为准。通常,除非有特别特殊的需要(例如遗留的对象键顺序假设),大多数应用应该更愿意把json数据存储为jsonb

<强>官网:

json和jsonb数据类型接受* * *几乎* * *完全相同的值集合作为输入。主要的实际区别之一是效率. json数据类型存储输入文本的精准拷贝,处理函数必须在每次执行时必须重新解析该数据。而jsonb数据被存储在一种分解好的二进制格式中,它在输入时要稍慢一些,因为需要做附加的转换。但是jsonb在处理时要快很多,因为不需要解析.jsonb也支持索引,这也是一个令人瞩目的优势。

由于json类型存储的是输入文本的准确拷贝,其中可能会保留在语法上不明显的,存在于记号之间的空格,还有json对象内部的键的顺序。还有,如果一个值中的json对象包含同一个键超过一次,所有的键/值对都会被保留(处理函数会把最后的值当作有效值)。相反,jsonb不保留空格,不保留对象键的顺序并且不保留重复的对象键。如果在输入中指定了重复的键,只有最后一个值会被保留。

通常,除非有特别特殊的需要(例如遗留的对象键顺序假设),大多数应用应该更愿意把json数据存储为jsonb

由于json类型存储的是输入文本的准确拷贝,其中可能会保留在语法上不明显的,存在于记号之间的空格,还有json对象内部的键的顺序。还有,如果一个值中的json对象包含同一个键超过一次,所有的键/值对都会被保留(处理函数会把最后的值当作有效值)。相反,jsonb不保留空格,不保留对象键的顺序并且不保留重复的对象键。如果在输入中指定了重复的键,只有最后一个值会被保留。

- - - - - - - - - - - 1。键的顺序   SELECT  & # 39; {“bar":“baz",,“balance":, 7.77,“active":假}& # 39;::json;   ,,,,,,,,,,json ,,,,,,,,,,,   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   ,{“bar":,“baz",,“balance":, 7.77,“active":假}   (1,行)   SELECT  & # 39; {“bar":“baz",,“balance":, 7.77,“active":假}& # 39;::jsonb;   ,,,,,,,,,,jsonb ,,,,,,,,,,,   --------------------------------------------------   ,{“bar":,“baz",,“active":,假,,“balance":, 7.77}   (1,行)   - - - - - - - - - - 2。去重   SELECT  & # 39; {“bar":“baz",,“balance":, 7.77,“balance":假}& # 39;::jsonb;,——去重   {“bar":,“baz",,“balance":,假}   SELECT  & # 39; {“bar":“baz",,“balance":, 7.77,“balance":假}& # 39;::json;,——不去重   {“bar":,“baz",,“balance":, 7.77,“balance":假}   select  & # 39; [1,, 2,, 2] & # 39;:: jsonb ——数组不去重   [1,,2,,2)

将字符串转为json格式

平方——,简单标量/基本值   ——,基本值可以是数字,带引号的字符串,真、假或者null   SELECT  & # 39; 5 & # 39;:: json;   ——,有零个或者更多元素的数组(元素不需要为同一类型)   SELECT  & # 39; [1,, 2,,“foo",, null] & # 39;:: json;   ——,包含键值对的对象   ——,注意对象键必须总是带引号的字符串   SELECT  & # 39; {“bar":“baz",,“balance":, 7.77,“active":,假}& # 39;::json;   ——,数组和对象可以被任意嵌套   SELECT  & # 39; {“foo":,(真的,,“bar"),,“tags":, {“a": 1,“b":,零}}& # 39;::json;

输出:

5   (1,,2,,“foo”,零)   {“酒吧”:,“记者”,,“平衡”:,7.77,“活动”:,假}   {“foo”:,(真的,,“酒吧”,,“标签”:,{“a”: 1,“b”:,零}}

判断是否包含/存在@>和?

——,简单的标量/基本值只包含相同的值:   SELECT  & # 39;“foo" & # 39;:: jsonb  @>, & # 39;“foo" & # 39;:: jsonb;,,得,真t   ——,右边的数字被包含在左边的数组中:   SELECT  & # 39; [1, 2, 3] & # 39;:: jsonb  @>, & # 39; [1,, 3] & # 39;:: jsonb;,——t    ——,数组元素的顺序没有意义,因此这个例子也返回真:   SELECT  & # 39; [1, 2, 3] & # 39;:: jsonb  @>, & # 39; [3, 1] & # 39;:: jsonb。——t   ——,重复的数组元素也没有关系:   SELECT  & # 39; [1, 2, 3] & # 39;:: jsonb  @>, & # 39; [1,, 2,, 2] & # 39;:: jsonb。——t   ——,右边具有一个单一键值对的对象被包含在左边的对象中:   SELECT  & # 39; {“product":“PostgreSQL",,“version":, 9.4,“jsonb":,真正}& # 39;::jsonb  @>, & # 39; {“version":, 9.4} & # 39;:: jsonb;,, t

json数组与怎么在Postgresql中使用