JSON 文件表示法

JSON 文件由欄位組成,這些欄位是名稱/值配對物件。 這些欄位可以任意順序,並以巢狀方式或陣列方式排列。 Db2® 可以使用 JSON 文件的原始 JSON 格式或二進位編碼格式 BSON (二進位 JSON)。

如需 JSON 文件的相關資訊,請參閱 JSON 文件

JSON 資料必須以 Unicode 提供,並使用 UTF-8 編碼。 BSON 格式的資料必須在內部使用小序排列法格式。

為了方便起見,提供了 SYSIBM.JSON_TO_BSONSYSIBM.BSON_TO_JSON 轉換函數。 您可以視需要執行這些函數,將檔案從一種格式轉換成另一種格式。

當 JSON 資料呈現給 Db2 作為 JSON SQL 函數的輸入時,首先會根據一般 Db2 資料類型預期,將該資料解譯並儲存在適當的 Db2 資料類型內。 然後,根據來源 Db2 資料類型,將值轉換為對等原始 JSON 資料類型所需的格式。 然後由 JSON SQL 函數處理此 JSON 資料值。

若要容許將 JSON 資料從 Db2 資料類型傳遞至原始 JSON 表示法,而不進行轉換,可以置換預設行為。 在 JSON SQL 函數呼叫中使用選用的 FORMAT JSON 子句來置換預設行為。 未指定此子句時, Db2 會以下列方式解譯資料:
  • 數值、布林及空值不受影響。
  • 字串值會以雙引號括住,且字串內的任何特殊字元都會跳出。
  • 日期、時間及時間戳記值會以雙引號括住。
  • 二進位值會解譯為 UTF-8 資料。

指定 FORMAT JSON 子句表示資料已採用 JSON 格式,且不需要由 Db2 變更為有效的 JSON 值。 此子句僅決定 Db2正在或未執行的格式處理。 子句未偵測到無效的 JSON。

下表提供如何從其 Db2 資料類型表示法處理值至對等 JSON 資料表示法的部分範例。 在這些範例中,會使用及不使用選用 FORMAT JSON 子句的規格來完成處理。

DB2 資料類型 Db2 值 JSON 表示法 (未指定 FORMAT JSON 子句) JSON 表示法 (指定 FORMAT JSON) 輸入的說明
字串 (character string) {"Name":123} "{\"Name\":123}" {"Name":123} 字串中包含的有效 JSON 物件。
字串 (character string) {"Name";123} "{\"Name\";123}" {"Name";123} JSON 物件無效時的 FORMAT JSON
字串 (character string) ["Name" , "Address"] "[\" Name \" , \" Address \"]" ["Name" , "Address"] 字串中包含的有效 JSON 陣列。
字串 (character string) ["Name": "Address"] "[\" Name \": \" Address \"]" ["Name": "Address"] 無效 JSON 陣列上的 FORMAT JSON

BSON 格式的資料不會轉換,且會直接傳遞至 JSON SQL 函數,以作為 BSON 處理。

除非指定選用的 FORMAT JSON 子句,否則使用 Db2 二進位資料類型呈現給 JSON SQL 函數的資料會假設為 BSON 格式。

表 1. Db2 JSON SQL 函數的預設格式假設
DB2 資料類型 採用的格式
BLOB BSON
CHARACTER JSON
CLOB JSON
VARBINARY BSON
VARCHAR JSON

複製索引鍵

與 JSON 本身類似, Db2 不會對 JSON 文件中的索引鍵名稱施行唯一性。 不強制唯一性,相同的索引鍵名稱可能在相同的 JSON 文件內存在一或多次,甚至在相同的 JSON 物件內。 在相同 JSON 物件中具有相同名稱的索引鍵會被視為重複索引鍵。 如果 JSON 物件中存在重複的索引鍵,則 Db2 處理只會傳回發現的第一個索引鍵。 第一個索引鍵可能是文件中第一個出現的索引鍵,也可能不是第一個出現的索引鍵。

例如,索引鍵 "a" 在此 JSON 文件中出現多次 (已格式化使範例更明顯):

{"a":{"b":10,
      "c":11},
 "a":{"d":70,
      "e":71}}

在此情況下,索引鍵 "a" 被視為重複索引鍵名稱,因為它在相同的 JSON 物件內出現兩次。 Db2 只會從這個 JSON 物件傳回一個名稱為 "a" 的索引鍵。

在另一個範例中,索引鍵 "a" 在此 JSON 文件中出現多次,但在不同的 JSON 物件中:
{"a":{"b":10,
      "c": 11},
 "b":{"a":70,
      "b": 71}}

在此範例中,如果查詢適當的 JSON 物件,則不會將索引鍵 "a" 視為重複索引鍵名稱,且 Db2 會傳回 "a" 的兩個值。 同樣地,雖然索引鍵名稱 "b" 在範例中出現多次,但它也只在每一個唯一 JSON 物件中出現一次。 因此,不會將其出現項目視為重複索引鍵。

BSON 格式

Db2 支援以 BSON 格式呈現的資料,作為 JSON SQL 函數的輸入。 BSON 資料可以由客戶提供,或從增補 [SYSIBM.JSON_TO_BSON] 轉換函數。

所有標準 BSON 資料類型限制會套用至提供作為 JSON SQL 函數輸入的值。 例如, BSON 格式支援的長整數上限為 9,223,372,036,854,775,807 (264 -1)。

查詢資料的 JSON SQL 函數 (例如, JSON_TABLE、JSON_VALUE 或 JSON_QUERY) 不支援處理下列 BSON 資料類型。 透過下列其中一個函數直接存取下列其中一個 BSON 資料類型會傳回錯誤:
  • BSON 二進位
  • BSON 物件 ID
  • BSON 正規表示式
  • BSON DB 指標
  • BSON JavaScript 程式碼
  • BSON JavaScript 程式碼與範圍
  • BSON 符號
  • BSON 時間戳記
  • BSON 最小索引鍵
  • BSON 索引鍵上限