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 まで、数値をスキップせずに続けます。 配列内の項目には、任意のオブジェクトを含めることができます。 たとえば、最初の項目に appappId の 2 つのオブジェクトを含めます。 2 番目の項目に program の単一のオブジェクトを含めます。 3 番目の項目に colorlanguagelogobackground の 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、変換要求の種類 customerEntity.userObjectId "01234567-89ab-cdef-0123-456789abcdef"
    • givenName、変換要求の種類 customerEntity.firstName "John"
    • surname、変換要求の種類 customerEntity.lastName "Smith"
  • 入力パラメーター:
    • customerEntity.role.name:"Administrator"
    • customerEntity.role.id 1
  • 出力要求:
    • requestBody:

      {
         "customerEntity":{
            "email":"john.s@contoso.com",
            "userObjectId":"01234567-89ab-cdef-0123-456789abcdef",
            "firstName":"John",
            "lastName":"Smith",
            "role":{
               "name":"Administrator",
               "id": 1
            }
         }
      }
      

GenerateJson 要求変換によって、プレーン文字列が受け入れられます。 入力要求に JSON 文字列が含まれている場合、その文字列はエスケープされます。 次の例で、CreateJsonArray above、つまり ["someone@contoso.com"] からの電子メール出力を入力パラメーターとして使用する場合、その電子メールは、次の JSON 要求のように表示されます。

  • 出力要求:
    • requestBody:

      {
         "customerEntity":{
            "email":"[\"someone@contoso.com\"]",
            "userObjectId":"01234567-89ab-cdef-0123-456789abcdef",
            "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 リポジトリをご覧ください