You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Custom Policies中生成含带点属性的JSON?是否可行?

Azure AD B2C自定义策略生成目标嵌套JSON格式的问题解答

结论

可以生成目标格式的嵌套JSON,但无法通过单个GenerateJson转换直接实现,需要通过多步骤ClaimsTransformation组合构建。

原因

Azure AD B2C的GenerateJson转换中,InputParameter的Id字段仅会被当作JSON的顶级键名处理,不支持通过冒号(:)或点号(.)语法直接解析为嵌套结构。你当前的代码会把something:abc.0:user.property完整作为一个平级键,因此生成的是{"something:abc.0:user.property": "value"}这种不符合预期的JSON。

解决方法:多步骤组合生成嵌套结构

要构建嵌套JSON,需要分层创建各层级的JSON对象,再逐层组合:

1. 定义所需的Claim类型

首先在策略的<ClaimSchema>中添加用于存储各层级JSON的字符串类型Claim:

<ClaimSchema>
  <ClaimType Id="userPropertyJson">
    <DisplayName>User Property JSON</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
  <ClaimType Id="userJson">
    <DisplayName>User JSON</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
  <ClaimType Id="abcJson">
    <DisplayName>ABC JSON</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
  <ClaimType Id="finalRequestBody">
    <DisplayName>Final Request Body JSON</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
</ClaimSchema>

2. 分层创建ClaimsTransformation

通过多个GenerateJson转换逐层构建嵌套结构:

<!-- 步骤1:生成最内层 {"property": "value"} -->
<ClaimsTransformation Id="GenerateUserPropertyJson" TransformationMethod="GenerateJson">
  <InputParameters>
    <InputParameter Id="property" DataType="string" Value="value" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="userPropertyJson" TransformationClaimType="outputJson" />
  </OutputClaims>
</ClaimsTransformation>

<!-- 步骤2:生成 {"user": [{"property": "value"}]} -->
<ClaimsTransformation Id="GenerateUserJson" TransformationMethod="GenerateJson">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="userPropertyJson" TransformationClaimType="user.0" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="userJson" TransformationClaimType="outputJson" />
  </OutputClaims>
</ClaimsTransformation>

<!-- 步骤3:生成 {"abc": [{"user": {"property": "value"}}]} -->
<ClaimsTransformation Id="GenerateAbcJson" TransformationMethod="GenerateJson">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="userJson" TransformationClaimType="abc.0" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="abcJson" TransformationClaimType="outputJson" />
  </OutputClaims>
</ClaimsTransformation>

<!-- 步骤4:生成最终目标JSON {"something": {"abc": [{"user": {"property": "value"}}]}} -->
<ClaimsTransformation Id="GenerateAMNotificationRequestBody" TransformationMethod="GenerateJson">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="abcJson" TransformationClaimType="something" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="finalRequestBody" TransformationClaimType="outputJson" />
  </OutputClaims>
</ClaimsTransformation>

关键说明

  • 每个GenerateJson负责构建一层嵌套结构,通过InputClaims引用上一步生成的JSON Claim。
  • 使用TransformationClaimType="键名.索引"的格式可以生成数组结构,比如user.0表示user数组的第一个元素。

内容的提问来源于stack exchange,提问作者Deepak Thakur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:40:37