1. 程式人生 > 其它 >KingbaseES 中 JSON 介紹

KingbaseES 中 JSON 介紹

  • KingbaseES支援JSON和JSONB。這兩種型別在使用上幾乎完全一致,主要區別是
    1.JSON型別把輸入的資料原封不動的存放到資料庫中。JSONB型別在存放時把JSON解析成二進位制格式。
    2.JSONB支援在其上建索引,而JSON不能,這是JSONB的一個很大的優點。
    3.JSON中會保留多餘的空格,保留重複的Key,保留Key的順序。JSONB則完全相反,不保留多餘的空格,不保留重複的Key,不保留Key的順序。

  • JSON基本型別和對應的KingbaseES型別

JSON 基本型別 KingbaseES型別 註釋
string text 不允許\u0000,如果資料庫編碼不是 UTF8,非ASCII Unicode轉義也是這樣
number numeric JSON中沒有 NaN 和 infinity值
boolean boolean JSON只接受小寫true和false拼寫
null (無) SQL NULL是一個不同的概念
  • JSON 輸入和輸出語法
    下列都是合法的json(或者jsonb)表示式:
    簡單標量/基本值
    基本值可以是數字、帶引號的字串、true、false或者null
    SELECT '5'::json;
    有零個或者更多元素的陣列(元素不需要為同一型別)
    SELECT '[1, 2, "foo", null]'::json;
    包含鍵值對的物件,注意物件鍵必須總是帶引號的字串
    SELECT '{"bar": "baz", "balance": 7.77, "active": false}'::json;

    陣列和物件可以被任意巢狀
    SELECT '{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}'::json;

如前所述,當一個JSON值被輸入並且接著不做任何附加處理就輸出時,json會輸出和輸入完全相同的文字,而 JSONB 則不會保留語義上沒有意義的細節(例如空格)。
例如,注意下面的不同:

SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::json;
json
.-------------------------------------------------
{"bar": "baz", "balance": 7.77, "active":false}
(1 row)
SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::jsonb;
jsonb
.--------------------------------------------------
{"bar": "baz", "active": false, "balance": 7.77}
(1 row)