注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

JSON 文字列のパース

サポート対象:バッチ、高速、ストリーミング

指定されたスキーマ定義に従って JSON 文字列をパースし、スキーマにないフィールドは無視します。

式のカテゴリー: データ準備、人気、文字列、構造体

宣言された引数

  • JSON: スキーマを使用してパースする JSON。
    Expression<String>
  • スキーマ: JSON 文字列のパース時に使用するスキーマ定義。
    Type<Array<AnyType> | Map<String, String> | Struct>
  • 任意 出力モード: 「simple」出力モードでは、パースに失敗したフィールドを null として扱います。「with errors」出力モードでは、パース時に見つかったエラーを「error」フィールドに、有効なパース済み JSON を「ok」フィールドに格納した、パース可能な構造体を返します。
    Enum<Simple, With errors>

出力タイプ: Array<AnyType> | Map<String, String> | Struct

例

例1:基本ケース

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, miles>>
  • 出力モード: null
json出力
{
 "airline": "XB-112",
 "airport": {
  "id": "JFK",
  "miles": 2000
 }
}
{
 airline: XB-112,
 airport: {
 id: JFK,
 miles: 2000,
},
}

例2:基本ケース

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, miles>>
  • 出力モード: WITH_ERRORS
json出力
{
 "airline": "XB-112",
 "airport": {
  "id": "JFK",
  "miles": 2000
 }
}
{
 error: null,
 ok: {
 airline: XB-112,
 airport: {
 id: JFK,
 miles: 2000,
},
},
}

例3:null のケース

説明: 入力 JSON に要求されたフィールドがない場合、そのフィールドは null になります。

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, miles>>
  • 出力モード: null
json出力
{
 "airline": "XB-112",
 "airport": {
  "id": "JFK"
 }
}
{
 airline: XB-112,
 airport: {
 id: JFK,
 miles: null,
},
}

例4:null のケース

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, miles>>
  • 出力モード: null
json出力
nullnull

例5:null のケース

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, miles>>
  • 出力モード: WITH_ERRORS
json出力
null{
 error:JSON 入力が null または空です,
 ok: null,
}

例6:null のケース

説明: 入力 JSON で要求されたフィールドが null である場合、そのフィールドは null になります。

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, miles>>
  • 出力モード: null
json出力
{
 "airline": "XB-112",
 "airport": {
  "id": "JFK",
  "miles": null
 }
}
{
 airline: XB-112,
 airport: {
 id: JFK,
 miles: null,
},
}

例7:null のケース

説明: 構造体のフィールドが配列である場合をテストします。

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, countries<String>>>
  • 出力モード: null
json出力
{
 "airline": "XB-112",
 "airport": {
  "id": "JFK",
  "countries": ["USA", "Canada"]
 }
}
{
 airline: XB-112,
 airport: {
 countries: [ USA, Canada ],
 id: JFK,
},
}

例8:null のケース

説明: 構造体のフィールドが空の文字列である場合をテストします。

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, countries<String>>>
  • 出力モード: null
json出力
{
 "airline": "XB-112",
 "airport": {
  "id": "",
  "countries": ["USA", "Canada"]
 }
}
{
 airline: XB-112,
 airport: {
 countries: [ USA, Canada ],
 id:空の文字列,
},
}

例9:null のケース

説明: 構造体のフィールドが null 要素を含む配列である場合をテストします。

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, countries<String>>>
  • 出力モード: null
json出力
{
 "airline": "XB-112",
 "airport": {
  "id": "JFK",
  "countries": ["USA", null]
 }
}
{
 airline: XB-112,
 airport: {
 countries: [ USA, null ],
 id: JFK,
},
}

例10:null のケース

説明: 構造体のフィールドが null の文字列である場合をテストします。

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, countries<String>>>
  • 出力モード: null
json出力
{
 "airline": "XB-112",
 "airport": {
  "id": null,
  "countries": ["USA", "Canada"]
 }
}
{
 airline: XB-112,
 airport: {
 countries: [ USA, Canada ],
 id: null,
},
}

例11:null のケース

説明: 1個のフィールドがマップである構造体をテストします。

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, countries<String, Integer>>>
  • 出力モード: null
json出力
{
 "airline": "XB-112",
 "airport": {
  "id": "JFK",
  "countries": {"USA": 4}
 }
}
{
 airline: XB-112,
 airport: {
 countries: {
 USA -> 4,
},
 id: JFK,
},
}

例12:null のケース

説明: Double フィールドを持つ構造体をパースします。

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, miles>>
  • 出力モード: null
json出力
{
 "airline": "XB-112",
 "airport": {
  "id": "JFK",
  "miles": 4.2
 }
}
{
 airline: XB-112,
 airport: {
 id: JFK,
 miles: 4.2,
},
}

例13:null のケース

説明: 整数を Double としてパースした場合、Double が返されるはずです。

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, miles>>
  • 出力モード: null
json出力
{
 "airline": "XB-112",
 "airport": {
  "id": "JFK",
  "miles": 4
 }
}
{
 airline: XB-112,
 airport: {
 id: JFK,
 miles: 4.0,
},
}

例14:null のケース

説明: マップに null 値がある場合、結果の構造体にも null 値が含まれます。

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, countries<String, Integer>>>
  • 出力モード: null
json出力
{
 "airline": "XB-112",
 "airport": {
  "id": "JFK",
  "countries": {"USA": null}
 }
}
{
 airline: XB-112,
 airport: {
 countries: {
 USA -> null,
},
 id: JFK,
},
}

例15:エッジケース

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, miles>>
  • 出力モード: WITH_ERRORS
json出力
invalid{
 error:JSON の内容が無効または不正です,
 ok: null,
}

例16:エッジケース

引数の値:

  • JSON: json
  • スキーマ: Struct<boolVal, byteVal, shortVal, intVal, longVal, doubleVal, floatVal, dateVal, timestampVal, decimalVal(9, 4), myMap<String, Integer>, myArray<Integer>>
  • 出力モード: WITH_ERRORS
json出力
{
 "timestampVal": "これは文字列です。"
}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}
{"boolVal": 5}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}
{"byteVal": "これは Byte ではありません。"}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}
{"shortVal": "これは Short ではありません。"}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}
{"longVal": "これは Long ではありません。"}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}
{"intVal": 5.2}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}
{"doubleVal": "これは Double ではありません。"}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}
{"floatVal": "これは Float ではありません。"}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}
{"dateVal": "32/13/2020"}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}
{"decimalVal": "これは Decimal ではありません。"}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}
{"myMap": {"a": "str"}}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}
{"myArray": ["a", "b"]}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}

例17:エッジケース

引数の値:

  • JSON: json
  • スキーマ: Struct<airport<id, miles>, boolVal>
  • 出力モード: WITH_ERRORS
json出力
{
 "boolVal": true
}
{
 error: null,
 ok: {
 airport: null,
 boolVal: true,
},
}
{
 "boolVal": "これは文字列です。"
}
{
 error:JSON の内容が期待されるデータ型と一致しません、
 ok: null,
}

例18:エッジケース

引数の値:

  • JSON: json
  • スキーマ: Struct<airline, airport<id, miles>>
  • 出力モード: WITH_ERRORS
json出力
{
 "arrival_time":
{
 error:JSON のパース中に予期しない EOF が発生しました、
 ok: null,
}