JSON 形式

MIME タイプ: application/json

ID: json

JSON データ形式では、値が DataWeave 値と 1 対 1 でマップされます。 JSON では、​String​、​Boolean​、​Number​、​Null​、​Object​、​Array​ 型がサポートされています。DataWeave では、これらの各値がネイティブにサポートされています。

JSON 入力の DataWeave リーダーでは、次の解析戦略がサポートされます。

  • インデックス付き

  • メモリ内

  • ストリーミング

DataWeave リーダーおよびライターでこの形式に適用できる解析戦略を理解するには、​「DataWeave 解析戦略」​を参照してください。

次の例は、JSON 形式の使用方法を示しています。

例: JSON を DataWeave (dw) 形式で表す

次の例は、JSON 入力が DataWeave (dw) 形式でどのように表されるのかを示しています。

入力

次の JSON オブジェクトは、DataWeave ソースへの入力ペイロードとして機能します。

{
  "name": "Matias",
  "age": 8,
  "male": true,
  "kids": null,
  "brothers": ["Pedro", "Sara"]
}

ソース

DataWeave スクリプトは JSON 入力ペイロードを DataWeave (dw) 形式および MIME タイプに変換します。

output application/dw
---
payload

出力

JSON 入力と ​application/dw​ 出力では、キーのみが異なります。JSON キーは、引用符で囲まれています。これらの DataWeave (dw) キーでは、引用符は必要ありません。詳細は、​「有効なキー」​を参照してください。

{
  name: "Matias",
  age: 8,
  male: true,
  kids: null,
  brothers: [
    "Pedro",
    "Sara"
  ]
}

例: 繰り返される XML 要素を JSON に変換する

次の例は、繰り返される XML 要素を JSON に変換する方法を示しています。

XML は、コレクションを繰り返される (無制限の) 要素を使用してコレクションをエンコードします。DataWeave では、同じキーを繰り返して無制限の要素を表します。

入力

次の XML データには、​name​ というキーを持つ、繰り返される子要素が含まれます。この XML は、DataWeave ソースへの入力ペイロードとして機能します。

<?xml version='1.0' encoding='UTF-8'?>
<friends>
  <name>Mariano</name>
  <name>Shoki</name>
  <name>Tomo</name>
  <name>Ana</name>
</friends>

ソース

次の DataWeave スクリプトは、XML 入力をペイロードとして取得し、そのペイロードを JSON 形式で出力します。

スクリプトは、XML 入力から ​name​ 要素を選択し、DataWeave ​map​ 関数を使用して、それらの要素の値をオブジェクトの配列にマップします。配列の各オブジェクトの形式は ​{ name : item }​ のようになります。​item​ は ​name​ 要素の値です。配列全体は、​friends​ キーの値として機能します。

%dw 2.0
output application/json
---
friends: payload.friends.*name map (
            (item, index) -> {name: item}
         )

出力

この DataWeave スクリプトは、次の JSON オブジェクトを出力します。

{
  "friends": [
    {
      "name": "Mariano"
    },
    {
      "name": "Shoki"
    },
    {
      "name": "Tomo"
    },
    {
      "name": "Ana"
    }
  ]
}

例: JSON データをストリーミングする

ストリーミングを示すため、次の例では、配列内の各要素を一度に 1 つずつ読み取って、JSON ファイルをストリーミングします。

入力

JSON 入力ペイロードは、XML 設定の入力として機能します。

JSON 入力 (切り捨てられています):
{ "myJsonExample" : [
    {
      "name" : "Shoki",
      "zipcode": "95838"
    },
    {
      "name" : "Leandro",
      "zipcode": "95823"
    },
    {
      "name" : "Mariano",
      "zipcode": "95815"
    },
    {
      "name" : "Cristian",
      "zipcode": "95815"
    },
    {
      "name" : "Kevin",
      "zipcode": "95824"
    },
    {
      "name" : "Stanley",
      "zipcode": "95841"
    }
  ]
}

XML Configuration (TLS 設定)

次の XML 設定は、JSON 入力をストリーミングします。

<file:config name="File_Config" doc:name="File Config" />
<flow name="dw-streaming-jsonFlow" >
  <scheduler doc:name="Scheduler" >
    <scheduling-strategy >
      <fixed-frequency frequency="1" timeUnit="MINUTES"/>
    </scheduling-strategy>
  </scheduler>
  <file:read doc:name="Read"
     config-ref="File_Config"
     path="${app.home}/myjsonarray.json"
     outputMimeType="application/json; streaming=true"/>
  <ee:transform doc:name="Transform Message" >
    <ee:message >
      <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload.myJsonExample map ((element) -> {
returnedElement : element.zipcode
})]]></ee:set-payload>
    </ee:message>
  </ee:transform>
  <file:write doc:name="Write"
    path="/path/to/output/file/output.json"
    config-ref="File_Config1"/>
  <logger level="INFO" doc:name="Logger" message="#[payload]"/>
</flow>
  • このストリーミング例では、​outputMimeType="application/json; streaming=true"​ を設定して、JSON 入力をストリーミングするように File Read 操作を設定します。 Studio UI では、リスナーの ​[MIME Type (MIME タイプ)]​ を ​application/json​ に設定し、MIME タイプの ​[Parameters (パラメーター)]​ を ​[Key (キー)]​ ​streaming​ と ​[Value (値)]​ ​true​ に設定できます。

  • Transform Message​ コンポーネントの DataWeave スクリプトは、入力ペイロードの配列を反復処理し、その ​zipcode​ 値を選択します。

  • Write 操作によって、変換の結果が含まれるファイル (​output.json​) が返されます。

  • Logger は、​output.json​ に表示されるものと同じ出力ペイロードを出力します。

出力

この JSON ストリーミングの例では、オブジェクトの JSON 配列が生成されます。

[
  {
    "returnedElement": "95838"
  },
  {
    "returnedElement": "95823"
  },
  {
    "returnedElement": "95815"
  },
  {
    "returnedElement": "95815"
  },
  {
    "returnedElement": "95824"
  },
  {
    "returnedElement": "95841"
  }
]

Configuration のプロパティ

DataWeave では、この形式の以下の設定プロパティがサポートされています。

Reader のプロパティ

この形式は、入力データを読み取るための指示を提供するプロパティを受け入れます。

パラメーター デフォルト 説明

streaming

Boolean

false

true​ に設定すると、入力をストリーミングします。エントリを順次アクセスする場合のみ使用します。入力は最上位の配列である必要があります。

有効な値は、​true​ または ​false​ です。

Writer のプロパティ

この形式は、出力データを書き込むための指示を提供するプロパティを受け入れます。

パラメーター デフォルト 説明

bufferSize

Number

8192

バッファライターのサイズ。

deferred

Boolean

false

true​ に設定すると、出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。

有効な値は、​true​ または ​false​ です。

duplicateKeyAsArray

Boolean

false

オブジェクト内の重複キーの値を複製されたキーに対する値の 1 つの配列に変換します。

有効な値は、​true​ または ​false​ です。

encoding

String

'UTF-8'

出力で使用する文字セット (UTF-8 など)。

indent

Boolean

true

デフォルトでは出力をインデントして読みやすくします。​false​ に設定すると、出力を 1 行に圧縮します。

有効な値は、​true​ または ​false​ です。

skipNullOn

String

null

指定されたデータ構造の ​null​ 値をスキップします。デフォルトではスキップしません。

  • arrays​ + JSON 出力の配列内の ​null​ 値を無視して除外します。たとえば、​output application/json skipNullOn="arrays"​ のようにします。

  • objects​ + 値が ​null​ のキー-値ペア (例: output application/json skipNullOn="objects"​) を無視します。

  • everywhere​ + ​skipNullOn​ を配列とオブジェクトに適用します。たとえば、​output application/json skipNullOn="everywhere"​ のようにします。

有効な値は ​arrays​、​objects​、​everywhere​ です。

writeAttributes

Boolean

false

キーの属性をそのキーの子キー-値のペアに変換します。属性キー名の先頭は @ になります。

有効な値は、​true​ または ​false​ です。

サポートされる MIME タイプ

この形式では、次の MIME タイプがサポートされます。

MIME タイプ

*/json

/+json