JSON 要求変換
この記事では、Azure Active Directory B2C (Azure AD B2C) の Identity Experience Framework スキーマの JSON 要求変換の使用例を示します。 詳細については、「要求変換」をご覧ください。
CreateJsonArray
要求値から JSON の単一要素配列を作成します。 この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
InputClaim | inputClaim | string | 出力要求に追加される要求。 |
OutputClaim | outputClaim | string | この要求変換が呼び出された後に生成される JSON 文字列。 |
CreateJsonArray の例
次の例では、JSON の単一の配列を作成します。
<ClaimsTransformation Id="createlJsonPayload" TransformationMethod="CreateJsonArray">
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputClaim" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="result" TransformationClaimType="outputClaim" />
</OutputClaims>
</ClaimsTransformation>
- 入力要求:
- inputClaim: someone@example.com
- 出力要求:
- outputClaim: ["someone@contoso.com"]
GenerateJson
要求値か定数を使用して JSON 文字列を生成します。 ドット表記に続くパス文字列は、JSON 文字列にデータを挿入する場所を示す目的で使用されます。 ドットで分けられた後、整数は JSON 配列のインデックスとして解釈され、整数以外は JSON オブジェクトのインデックスとして解釈されます。
この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
InputClaim | ドット表記に続く任意の文字列 | string | 要求値の挿入先となる JSON の JsonPath。 |
InputParameter | ドット表記に続く任意の文字列 | string | 定数文字列値の挿入先となる JSON の JsonPath。 |
OutputClaim | outputClaim | string | 生成された JSON 文字列。 |
JSON 配列
JSON オブジェクトを JSON 配列に追加するには、配列名の形式と配列内のインデックスを使用します。 配列は 0 から始まります。 0 から始めて N まで、数値をスキップせずに続けます。 配列内の項目には、任意のオブジェクトを含めることができます。 たとえば、最初の項目に app と appId の 2 つのオブジェクトを含めます。 2 番目の項目に program の単一のオブジェクトを含めます。 3 番目の項目に color、language、logo、background の 4 つのオブジェクトを含めます。
次の例では、JSON 配列を構成する方法を示します。 emails 配列では、動的な値とともに InputClaims
を使用します。 values 配列では、静的な値とともに InputParameters
を使用します。
<ClaimsTransformation Id="GenerateJsonPayload" TransformationMethod="GenerateJson">
<InputClaims>
<InputClaim ClaimTypeReferenceId="mailToName1" TransformationClaimType="emails.0.name" />
<InputClaim ClaimTypeReferenceId="mailToAddress1" TransformationClaimType="emails.0.address" />
<InputClaim ClaimTypeReferenceId="mailToName2" TransformationClaimType="emails.1.name" />
<InputClaim ClaimTypeReferenceId="mailToAddress2" TransformationClaimType="emails.1.address" />
</InputClaims>
<InputParameters>
<InputParameter Id="values.0.app" DataType="string" Value="Mobile app" />
<InputParameter Id="values.0.appId" DataType="string" Value="123" />
<InputParameter Id="values.1.program" DataType="string" Value="Holidays" />
<InputParameter Id="values.2.color" DataType="string" Value="Yellow" />
<InputParameter Id="values.2.language" DataType="string" Value="Spanish" />
<InputParameter Id="values.2.logo" DataType="string" Value="contoso.png" />
<InputParameter Id="values.2.background" DataType="string" Value="White" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="result" TransformationClaimType="outputClaim" />
</OutputClaims>
</ClaimsTransformation>
この要求変換の結果:
{
"values": [
{
"app": "Mobile app",
"appId": "123"
},
{
"program": "Holidays"
},
{
"color": "Yellow",
"language": "Spanish",
"logo": "contoso.png",
"background": "White"
}
],
"emails": [
{
"name": "Joni",
"address": "joni@contoso.com"
},
{
"name": "Emily",
"address": "emily@contoso.com"
}
]
}
入力要求と入力パラメーターの両方で JSON 配列を指定するには、InputClaims
要素の配列を 0 から始め N まで続ける必要があります。次に InputParameters
要素で最後のインデックスからインデックスを続けます。
次の例では、入力要求と入力パラメーターの両方で定義されている配列が示されています。 values 配列の最初の項目 values.0
は、入力要求で定義されます。 入力パラメーターは、インデックス 1 values.1
から 2 つのインデックス values.2
まで続きます。
<ClaimsTransformation Id="GenerateJsonPayload" TransformationMethod="GenerateJson">
<InputClaims>
<InputClaim ClaimTypeReferenceId="app" TransformationClaimType="values.0.app" />
<InputClaim ClaimTypeReferenceId="appId" TransformationClaimType="values.0.appId" />
</InputClaims>
<InputParameters>
<InputParameter Id="values.1.program" DataType="string" Value="Holidays" />
<InputParameter Id="values.2.color" DataType="string" Value="Yellow" />
<InputParameter Id="values.2.language" DataType="string" Value="Spanish" />
<InputParameter Id="values.2.logo" DataType="string" Value="contoso.png" />
<InputParameter Id="values.2.background" DataType="string" Value="White" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="result" TransformationClaimType="outputClaim" />
</OutputClaims>
</ClaimsTransformation>
GenerateJson の例
次の例では、"email" と "OTP" の要求値に基づいて JSON 文字列が生成され、さらに定数文字列が生成されます。
<ClaimsTransformation Id="GenerateRequestBody" TransformationMethod="GenerateJson">
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" TransformationClaimType="personalizations.0.to.0.email" />
<InputClaim ClaimTypeReferenceId="otp" TransformationClaimType="personalizations.0.dynamic_template_data.otp" />
<InputClaim ClaimTypeReferenceId="copiedEmail" TransformationClaimType="personalizations.0.dynamic_template_data.verify-email" />
</InputClaims>
<InputParameters>
<InputParameter Id="template_id" DataType="string" Value="d-4c56ffb40fa648b1aa6822283df94f60"/>
<InputParameter Id="from.email" DataType="string" Value="service@contoso.com"/>
<InputParameter Id="personalizations.0.subject" DataType="string" Value="Contoso account email verification code"/>
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="requestBody" TransformationClaimType="outputClaim"/>
</OutputClaims>
</ClaimsTransformation>
次の要求変換では、SendGrid (サードパーティ電子メール プロバイダー) に送信される要求の本文となる JSON 文字列要求が出力されます。 JSON オブジェクトの構造は、InputClaims の InputParameters と TransformationClaimTypes というドット表記で ID により定義されます。 ドット表記の数値は配列を意味します。 値は、InputClaims の値と InputParameters の "Value" プロパティから取得されます。
- 入力要求:
- email、変換要求の種類 personalizations.0.to.0.email: "someone@example.com"
- copypiedEmail、変換要求の種類 personalizations.0.dynamic_template_data.verify-email: "someone@example.com"
- otp、変換要求の種類 personalizations.0.dynamic_template_data.otp "346349"
- 入力パラメーター:
- template_id: "d-4c56ffb40fa648b1aa6822283df94f60"
- from.email: "service@contoso.com"
- personalizations.0.subject "Contoso account email verification code"
- 出力要求:
outputClaim:
{ "personalizations": [ { "to": [ { "email": "someone@example.com" } ], "dynamic_template_data": { "otp": "346349", "verify-email" : "someone@example.com" }, "subject": "Contoso account email verification code" } ], "template_id": "d-989077fbba9746e89f3f6411f596fb96", "from": { "email": "service@contoso.com" } }
GenerateJson のもう 1 つの例
次の例では、要求値に基づいて JSON 文字列が生成され、さらに定数文字列が生成されます。
<ClaimsTransformation Id="GenerateRequestBody" TransformationMethod="GenerateJson">
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" TransformationClaimType="customerEntity.email" />
<InputClaim ClaimTypeReferenceId="objectId" TransformationClaimType="customerEntity.userObjectId" />
<InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="customerEntity.firstName" />
<InputClaim ClaimTypeReferenceId="surname" TransformationClaimType="customerEntity.lastName" />
</InputClaims>
<InputParameters>
<InputParameter Id="customerEntity.role.name" DataType="string" Value="Administrator"/>
<InputParameter Id="customerEntity.role.id" DataType="long" Value="1"/>
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="requestBody" TransformationClaimType="outputClaim"/>
</OutputClaims>
</ClaimsTransformation>
次の要求変換を使用すると、REST API に送信される要求の本文となる JSON 文字列要求が出力されます。 JSON オブジェクトの構造は、InputClaims の InputParameters と TransformationClaimTypes というドット表記で ID により定義されます。 値は、InputClaims の値と InputParameters の "Value" プロパティから取得されます。
- 入力要求:
- email、変換要求の種類 customerEntity.email: "john.s@contoso.com"
- objectId, transformation claim type customerEntity.userObjectId "aaaaaaaa-0000-1111-2222-bbbbbbbbbb"
- givenName、変換要求の種類 customerEntity.firstName "John"
- surname、変換要求の種類 customerEntity.lastName "Smith"
- 入力パラメーター:
- customerEntity.role.name:"Administrator"
- customerEntity.role.id 1
- 出力要求:
requestBody:
{ "customerEntity":{ "email":"john.s@contoso.com", "userObjectId":"aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "firstName":"John", "lastName":"Smith", "role":{ "name":"Administrator", "id": 1 } } }
GenerateJson 要求変換によって、プレーン文字列が受け入れられます。 入力要求に JSON 文字列が含まれている場合、その文字列はエスケープされます。 次の例で、CreateJsonArray above、つまり ["someone@contoso.com"] からの電子メール出力を入力パラメーターとして使用する場合、その電子メールは、次の JSON 要求のように表示されます。
- 出力要求:
requestBody:
{ "customerEntity":{ "email":"[\"someone@contoso.com\"]", "userObjectId":"aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "firstName":"John", "lastName":"Smith", "role":{ "name":"Administrator", "id": 1 } } }
GetClaimFromJson
JSON データから、指定された要素を取得します。 この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
InputClaim | inputJson | string | 項目を取得する要求変換で使用される要求。 |
InputParameter | claimToExtract | string | 抽出する JSON 要素の名前。 |
OutputClaim | extractedClaim | string | この要求変換が呼び出された後に生成される要求は、claimToExtract 入力パラメーターに指定された要素の値です。 |
GetClaimFromJson の例
次の例では、JSON データから要求変換によってemailAddress
要素が抽出されます。{"emailAddress": "someone@example.com", "displayName": "Someone"}
<ClaimsTransformation Id="GetEmailClaimFromJson" TransformationMethod="GetClaimFromJson">
<InputClaims>
<InputClaim ClaimTypeReferenceId="customUserData" TransformationClaimType="inputJson" />
</InputClaims>
<InputParameters>
<InputParameter Id="claimToExtract" DataType="string" Value="emailAddress" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="extractedEmail" TransformationClaimType="extractedClaim" />
</OutputClaims>
</ClaimsTransformation>
- 入力要求:
- inputJson: {"emailAddress": "someone@example.com", "displayName":"Someone"}
- 入力パラメーター:
- claimToExtract: emailAddress
- 出力要求:
- extractedClaim: someone@example.com
GetClaimFromJson のもう 1 つの例
GetClaimFromJson 要求変換では、JSON データから 1 つの要素が取得されます。 前の例では、emailAddress が該当します。 DisplayName を取得するには、別の要求変換を作成します。 次に例を示します。
<ClaimsTransformation Id="GetDispalyNameClaimFromJson" TransformationMethod="GetClaimFromJson">
<InputClaims>
<InputClaim ClaimTypeReferenceId="customUserData" TransformationClaimType="inputJson" />
</InputClaims>
<InputParameters>
<InputParameter Id="claimToExtract" DataType="string" Value="displayName" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="extractedClaim" />
</OutputClaims>
</ClaimsTransformation>
- 入力要求:
- inputJson: {"emailAddress": "someone@example.com", "displayName":"Someone"}
- 入力パラメーター:
- claimToExtract: displayName
- 出力要求:
- extractedClaim: Someone
GetClaimsFromJsonArray
Json データから、指定された要素の一覧を取得します。 この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
InputClaim | jsonSourceClaim | string | JSON ペイロードを含む要求。 この要求は、要求を取得する要求変換で使用されます。 |
InputParameter | errorOnMissingClaims | boolean | 要求の 1 つが不足している場合は、エラーをスローするかどうかを指定します。 |
InputParameter | includeEmptyClaims | string | 空の要求を含めるかどうかを指定します。 |
InputParameter | jsonSourceKeyName | string | 要素のキー名 |
InputParameter | jsonSourceValueName | string | 要素の値の名前 |
OutputClaim | コレクション | 文字列、int、ブール値、および datetime | 抽出する要求のリスト。 要求の名前は、jsonSourceClaim に指定されている入力要求の名前と同じでなければなりません。 |
GetClaimsFromJsonArray の例
次の例では、要求変換によって、次の要求が JSON データから抽出されます: email (文字列)、displayName (文字列)、membershipNum (int)、active (ブール値)、および birthDate (datetime)。
<ClaimsTransformation Id="GetClaimsFromJson" TransformationMethod="GetClaimsFromJsonArray">
<InputClaims>
<InputClaim ClaimTypeReferenceId="jsonSourceClaim" TransformationClaimType="jsonSource" />
</InputClaims>
<InputParameters>
<InputParameter Id="errorOnMissingClaims" DataType="boolean" Value="false" />
<InputParameter Id="includeEmptyClaims" DataType="boolean" Value="false" />
<InputParameter Id="jsonSourceKeyName" DataType="string" Value="key" />
<InputParameter Id="jsonSourceValueName" DataType="string" Value="value" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="membershipID" />
<OutputClaim ClaimTypeReferenceId="active" />
<OutputClaim ClaimTypeReferenceId="birthDate" />
</OutputClaims>
</ClaimsTransformation>
入力要求:
jsonSourceClaim:
[ { "key": "email", "value": "someone@example.com" }, { "key": "displayName", "value": "Someone" }, { "key": "membershipID", "value": 6353399 }, { "key": "active", "value": true }, { "key": "birthDate", "value": "2005-09-23T00:00:00Z" } ]
入力パラメーター:
- errorOnMissingClaims:false
- includeEmptyClaims:false
- jsonSourceKeyName:キー
- jsonSourceValueName: value
出力要求:
- email: "someone@example.com"
- displayName:"Someone"
- membershipID: 6353399
- アクティブ: true
- birthDate: 2005-09-23T00:00:00Z
GetClaimsFromJsonArrayV2
文字列コレクション JSON 要素から、指定された要素の一覧を取得します。 この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
InputClaim | jsonSourceClaim | stringCollection | JSON ペイロードを含む文字列コレクション要求。 この要求は、要求を取得する要求変換で使用されます。 |
InputParameter | errorOnMissingClaims | boolean | 要求の 1 つが不足している場合は、エラーをスローするかどうかを指定します。 |
InputParameter | includeEmptyClaims | string | 空の要求を含めるかどうかを指定します。 |
InputParameter | jsonSourceKeyName | string | 要素のキー名 |
InputParameter | jsonSourceValueName | string | 要素の値の名前 |
OutputClaim | コレクション | 文字列、int、ブール値、および datetime | 抽出する要求のリスト。 要求の名前は、jsonSourceClaim に指定されている入力要求の名前と同じでなければなりません。 |
GetClaimsFromJsonArrayV2 の例
次の例では、要求変換によって、次の要求が JSON データから抽出されます: email (文字列)、displayName (文字列)、membershipNum (int)、active (ブール値)、および birthDate (datetime)。
<ClaimsTransformation Id="GetClaimsFromJson" TransformationMethod="GetClaimsFromJsonArrayV2">
<InputClaims>
<InputClaim ClaimTypeReferenceId="jsonSourceClaim" TransformationClaimType="jsonSource" />
</InputClaims>
<InputParameters>
<InputParameter Id="errorOnMissingClaims" DataType="boolean" Value="false" />
<InputParameter Id="includeEmptyClaims" DataType="boolean" Value="false" />
<InputParameter Id="jsonSourceKeyName" DataType="string" Value="key" />
<InputParameter Id="jsonSourceValueName" DataType="string" Value="value" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="membershipID" />
<OutputClaim ClaimTypeReferenceId="active" />
<OutputClaim ClaimTypeReferenceId="birthDate" />
</OutputClaims>
</ClaimsTransformation>
入力要求:
jsonSourceClaim[0] (文字列コレクションの最初の要素):
{ "key": "email", "value": "someone@example.com" }
jsonSourceClaim[1] (文字列コレクションの 2 番目の要素):
{ "key": "displayName", "value": "Someone" }
jsonSourceClaim[2] (文字列コレクションの 3 番目の要素):
{ "key": "membershipID", "value": 6353399 }
jsonSourceClaim[3] (文字列コレクションの 4 番目の要素):
{ "key": "active", "value": true }
jsonSourceClaim[4] (文字列コレクションの 5 番目の要素):
{ "key": "birthDate", "value": "2005-09-23T00:00:00Z" }
入力パラメーター:
- errorOnMissingClaims:false
- includeEmptyClaims:false
- jsonSourceKeyName:キー
- jsonSourceValueName: value
出力要求:
- email: "someone@example.com"
- displayName:"Someone"
- membershipID: 6353399
- アクティブ: true
- birthDate: 2005-09-23T00:00:00Z
GetNumericClaimFromJson
JSON データから、指定した数値の (長) 要素を取得します。 この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
InputClaim | inputJson | string | JSON ペイロードを含む要求。 この要求は、数値要求を取得する要求変換で使用されます。 |
InputParameter | claimToExtract | string | 抽出する JSON 要素の名前。 |
OutputClaim | extractedClaim | long | この要求変換が呼び出された後に生成される要求は、claimToExtract 入力パラメーターに指定された要素の値です。 |
GetNumericClaimFromJson の例
次の例では、JSON データから要求変換によってid
要素が抽出されます。
<ClaimsTransformation Id="GetIdFromResponse" TransformationMethod="GetNumericClaimFromJson">
<InputClaims>
<InputClaim ClaimTypeReferenceId="exampleInputClaim" TransformationClaimType="inputJson" />
</InputClaims>
<InputParameters>
<InputParameter Id="claimToExtract" DataType="string" Value="id" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="membershipId" TransformationClaimType="extractedClaim" />
</OutputClaims>
</ClaimsTransformation>
入力要求:
inputJson:
{ "emailAddress": "someone@example.com", "displayName": "Someone", "id": 6353399 }
入力パラメーター
- claimToExtract: id
出力要求:
- extractedClaim:6353399
GetSingleItemFromJson
JSON データから最初の要素を取得します。 この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
InputClaim | inputJson | string | JSON ペイロードを含む要求。 この要求は、JSON データから項目を取得する要求変換で使用されます。 |
OutputClaim | key | string | JSON 内の最初の要素キー。 |
OutputClaim | value | string | JSON 内の最初の要素値。 |
GetSingleItemFromJson の例
次の例では、JSON データから要求変換によって最初の要素 (名) が抽出されます。
<ClaimsTransformation Id="GetGivenNameFromResponse" TransformationMethod="GetSingleItemFromJson">
<InputClaims>
<InputClaim ClaimTypeReferenceId="json" TransformationClaimType="inputJson" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="givenNameKey" TransformationClaimType="key" />
<OutputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="value" />
</OutputClaims>
</ClaimsTransformation>
入力要求:
inputJson:
{ "givenName": "Emily", "lastName": "Smith" }
出力要求:
- key: givenName
- value:Emilty
GetSingleValueFromJsonArray
JSON データの配列から最初の要素を取得します。 この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
InputClaim | inputJsonClaim | string | JSON ペイロードを含む要求。 この要求は、JSON 配列から値を取得する要求変換で使用されます。 |
OutputClaim | extractedClaim | string | この要求変換が呼び出された後に生成される要求は、JSON 配列の最初の要素です。 |
GetSingleValueFromJsonArray の例
次の例では、要求変換によって JSON 配列 ["someone@example.com", "Someone", 6353399]
の最初の要素 (メール アドレス) が抽出されます。
<ClaimsTransformation Id="GetEmailFromJson" TransformationMethod="GetSingleValueFromJsonArray">
<InputClaims>
<InputClaim ClaimTypeReferenceId="userData" TransformationClaimType="inputJsonClaim" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="email" TransformationClaimType="extractedClaim" />
</OutputClaims>
</ClaimsTransformation>
- 入力要求:
- inputJsonClaim: ["someone@example.com", "Someone", 6353399]
- 出力要求:
- extractedClaim: someone@example.com
XmlStringToJsonString
XML データを JSON 形式に変換します。 この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
InputClaim | xml | string | XML ペイロードを含む要求。 この要求は、データを XML から JSON 形式に変換する要求変換で使用されます。 |
OutputClaim | json | string | この要求変換が呼び出された後に生成される要求は、JSON 形式のデータであります。 |
<ClaimsTransformation Id="ConvertXmlToJson" TransformationMethod="XmlStringToJsonString">
<InputClaims>
<InputClaim ClaimTypeReferenceId="intpuXML" TransformationClaimType="xml" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="outputJson" TransformationClaimType="json" />
</OutputClaims>
</ClaimsTransformation>
XmlStringToJsonString の例
次の例では、ClaimsTransformationにより、下記のXML データが JSON 形式に変換されます。
入力要求:
<user>
<name>Someone</name>
<email>someone@example.com</email>
</user>
出力要求:
{
"user": {
"name":"Someone",
"email":"someone@example.com"
}
}
次の手順
- その他の要求変換のサンプルについては、Azure AD B2C コミュニティの GitHub リポジトリをご覧ください