---
schema_version: "1"
id: 97ddce95a00df6653a04cd8ddeb8399911cf022163526749b7593f292da74b38
title: JSON 形式
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/dataweave/2.4/dataweave-formats-json.md
canonical_url: https://docs.mulesoft.com/jp/dataweave/2.4/dataweave-formats-json
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 3d86a8a00e0c833841ef438a95f37aae9cc58f25a77008157e155f8ffa34b853
description: MuleSoft Documentation Site
release: "2.4"
latest: false
---
# JSON 形式

MIME タイプ: `application/json`​

ID: `json`​

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

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

- インデックス付き
- メモリ内
- ストリーミング

DataWeave リーダーおよびライターでこの形式に適用できる解析戦略を理解するには、​[「DataWeave 解析戦略」](https://docs.mulesoft.com/jp/dataweave/2.4/dataweave-formats#dw_readers_writers)​を参照してください。

## [](#examples)例

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

- [例: JSON を DataWeave (dw) 形式で表す](#example1)​
- [例: 繰り返される XML 要素を JSON に変換する](#example2)​
- [例: JSON データをストリーミングする](#example3)

### [](#example1)例: JSON を DataWeave (dw) 形式で表す

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

#### [](#入力)入力

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

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

#### [](#ソース)ソース

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

```dataweave
output application/dw
---
payload
```

#### [](#出力)出力

JSON 入力と ​`application/dw`​ 出力では、キーのみが異なります。JSON キーは、引用符で囲まれています。これらの DataWeave (dw) キーでは、引用符は必要ありません。詳細は、​[「有効なキー」](https://docs.mulesoft.com/jp/dataweave/2.4/dataweave-cookbook-extract-data#valid-keys)​を参照してください。

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

### [](#example2)例: 繰り返される XML 要素を JSON に変換する

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

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

#### [](#入力-2)入力

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

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

#### [](#ソース-2)ソース

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

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

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

#### [](#出力-2)出力

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

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

### [](#example3)例: JSON データをストリーミングする

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

#### [](#入力-3)入力

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

JSON 入力 (切り捨てられています):

```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 Configuration (TLS 設定)

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

```xml
<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`​ に表示されるものと同じ出力ペイロードを出力します。

#### [](#出力-3)出力

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

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

## [](#properties)Configuration のプロパティ

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

### [](#reader_properties)Reader のプロパティ

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

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 50.0002%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">パラメーター</th>
<th class="tableblock halign-left valign-top">型</th>
<th class="tableblock halign-left valign-top">デフォルト</th>
<th class="tableblock halign-left valign-top">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>streaming</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">​<code>false</code>​</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>​<code>true</code>​ に設定すると、入力をストリーミングします。エントリを順次アクセスする場合のみ使用します。入力は最上位の配列である必要があります。</p>
</div>
<div class="paragraph">
<p>有効な値は、​<code>true</code>​ または ​<code>false</code>​ です。</p>
</div></div></td>
</tr>
</tbody>
</table>

### [](#writer_properties)Writer のプロパティ

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

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 50.0002%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">パラメーター</th>
<th class="tableblock halign-left valign-top">型</th>
<th class="tableblock halign-left valign-top">デフォルト</th>
<th class="tableblock halign-left valign-top">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>bufferSize</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">​<code>8192</code>​</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>バッファライターのサイズ。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>deferred</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">​<code>false</code>​</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>​<code>true</code>​ に設定すると、出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。</p>
</div>
<div class="paragraph">
<p>有効な値は、​<code>true</code>​ または ​<code>false</code>​ です。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>duplicateKeyAsArray</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">​<code>false</code>​</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>オブジェクト内の重複キーの値を複製されたキーに対する値の 1 つの配列に変換します。</p>
</div>
<div class="paragraph">
<p>有効な値は、​<code>true</code>​ または ​<code>false</code>​ です。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>encoding</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">​<code>'UTF-8'</code>​</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>出力で使用する文字セット (UTF-8 など)。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>indent</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">​<code>true</code>​</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>デフォルトでは出力をインデントして読みやすくします。​<code>false</code>​ に設定すると、出力を 1 行に圧縮します。</p>
</div>
<div class="paragraph">
<p>有効な値は、​<code>true</code>​ または ​<code>false</code>​ です。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>skipNullOn</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">​<code>null</code>​</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>指定されたデータ構造の ​<code>null</code>​ 値をスキップします。デフォルトではスキップしません。</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>arrays</code>​ + JSON 出力の配列内の ​<code>null</code>​ 値を無視して除外します。たとえば、​<code>output application/json skipNullOn="arrays"</code>​ のようにします。</p>
</li>
<li>
<p><code>objects</code>​ + 値が ​<code>null</code>​ のキー-値ペア (例: <code>output application/json skipNullOn="objects"</code>​) を無視します。</p>
</li>
<li>
<p><code>everywhere</code>​ + ​<code>skipNullOn</code>​ を配列とオブジェクトに適用します。たとえば、​<code>output application/json skipNullOn="everywhere"</code>​ のようにします。</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>有効な値は ​<code>arrays</code>​、​<code>objects</code>​、​<code>everywhere</code>​ です。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>writeAttributes</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code>​</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">​<code>false</code>​</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>キーの属性をそのキーの子キー-値のペアに変換します。属性キー名の先頭は @ になります。</p>
</div>
<div class="paragraph">
<p>有効な値は、​<code>true</code>​ または ​<code>false</code>​ です。</p>
</div></div></td>
</tr>
</tbody>
</table>

## [](#mime_types)サポートされる MIME タイプ

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

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 100%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">MIME タイプ</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>*/json</code>​</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code><strong>/</strong>+json</code>​</p></td>
</tr>
</tbody>
</table>