分享方式:


from_json函式

適用於: 核取記號為「是」Databricks SQL 核取記號為「是」Databricks Runtime

傳回結構值為 jsonStrschema 的字串。

語法

from_json(jsonStr, schema [, options])

引數

  • jsonStrSTRING:指定 json 文件的運算式。
  • schemaSTRING:schema_of_json函式的表達式或調用。
  • options:指定指示詞的選擇性常 MAP<STRING,STRING> 值。

jsonStr應該在和options方面schema形成良好的格式。

schema 必須定義為逗號分隔的數據行名稱和數據類型組,類似於 中使用的 CREATE TABLE格式。 在 Databricks Runtime 12.2 schema 之前必須是常值。

注意

中的數據 schema 行和功能變數名稱會區分大小寫,且必須完全符合 中的 jsonStr 名稱。 若要對應唯有不同情況的 JSON 字段,您可以將 產生的結構轉換成 不同的功能變數名稱。 如需詳細資訊,請參閱 範例

options如果提供,可以是下列任一項:

  • primitivesAsString (預設值 false):將所有基本值推斷為字串類型。
  • prefersDecimal (預設值 false):將所有浮點值推斷為十進位類型。 如果值不符合小數,則會將其推斷為雙精度浮點數。
  • allowComments (預設值 false):忽略 JSON 記錄中的 Java 和C++樣式批注。
  • allowUnquotedFieldNames (預設值 false):允許未加上批注的 JSON 功能變數名稱。
  • allowSingleQuotes (預設值 true):除了雙引號之外,還允許單引號。
  • allowNumericLeadingZeros (預設值 false):允許數位中的前置零(例如, 00012)。
  • allowBackslashEscapingAnyCharacter (預設值 false):允許使用反斜杠引號機制接受所有字元的引號。
  • allowUnquotedControlChars (預設值 false):允許 JSON 字串包含未加上引號的控制字元(值為小於 32 的 ASCII 字元,包括製表元和行摘要字元)。
  • mode (預設值 PERMISSIVE):允許在剖析期間處理損毀記錄的模式。
    • PERMISSIVE:當它符合損毀的記錄時,會將格式錯誤的字串放入 所設定 columnNameOfCorruptRecord的欄位中,並將格式不正確的欄位設定為 null。 若要保留損毀的記錄,您可以在使用者定義的架構中設定名為 columnNameOfCorruptRecord 的字串類型字段。 如果架構沒有 欄位,則會在剖析期間卸除損毀的記錄。 在推斷架構時,它會隱含地在輸出架構中加入 columnNameOfCorruptRecord 字段。
    • FAILFAST:當它符合損毀的記錄時,會擲回例外狀況。
  • columnNameOfCorruptRecord (預設值為 中指定的 spark.sql.columnNameOfCorruptRecord值):允許重新命名新字段,其格式不正確的字串是由 PERMISSIVE 模式所建立。 這會覆寫 spark.sql.columnNameOfCorruptRecord
  • dateFormat (預設值 yyyy-MM-dd):設定表示日期格式的字串。 自訂日期格式會遵循 Datetime 模式的格式。 這適用於日期類型。
  • timestampFormat (預設值 yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]):設定表示時間戳格式的字串。 自訂日期格式會遵循 Datetime 模式的格式。 這適用於時間戳類型。
  • multiLine (預設值 false):剖析一筆記錄,每個檔案可能會跨越多行。
  • encoding (預設未設定):允許強制設定 JSON 檔案的標準基本或擴充編碼方式之一。 例如UTF-16BE、UTF-32LE。 如果未指定編碼,且 multiLine 設定為 true,則會自動偵測到。
  • lineSep (預設值涵蓋所有 \r\r\n\n):定義應該用於剖析的行分隔符。
  • samplingRatio (預設 1.0):定義用於架構推斷的輸入 JSON 物件分數。
  • dropFieldIfAllNull (預設值 false):在架構推斷期間,是否要忽略所有 Null 值的數據行或空數位元組/結構。
  • locale (預設值為 en-US): sets 地區設定為 IETF BCP 47 格式的語言標記。 例如,這是在剖析日期和時間戳時使用。
  • allowNonNumericNumbers (預設值 true): 允許 JSON 剖析器將一組非數位標記NaN辨識為合法的浮點數值:
    • +INF表示正無限,以及和 Infinity+Infinity別名。
    • -INF 若為負無限,則為 別名 -Infinity
    • NaN 對於其他非數位,例如除以零的結果。
  • readerCaseSensitive (預設值 true): 指定啟用時 rescuedDataColumn 區分大小寫的行為。 如果為 true,則修復名稱因大小寫而與結構描述不同的資料行;否則,請以不區分大小寫的方式讀取資料。 適用於 Databricks SQL 和 Databricks Runtime 13.3 LTS 和更新版本。

傳回

結構,具有符合架構定義的功能變數名稱和型別。

範例

> SELECT from_json('{"a":1, "b":0.8}', 'a INT, b DOUBLE');
{"a":1,"b":0.8}

-- The column name must to match the case of the JSON field
> SELECT from_json('{"a":1}', 'A INT');
{"A":null}

> SELECT from_json('{"datetime":"26/08/2015"}', 'datetime Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
{"datetime":2015-08-26 00:00:00}

-- Disambiguate field names with different cases
> SELECT cast(from_json('{"a":1, "A":0.8}', 'a INT, A DOUBLE') AS STRUCT<a: INT, b: DOUBLE>);
 {"a":1, "b":0.8}