>我正在使用复制数据活动将数据从 REST 服务复制到 Azure SQL Server。REST 服务返回分层 JSON 响应,我正在使用架构映射将其推送到 SQL 表中。这按预期工作,除了一些名称中包含空格的属性。下面是一个示例架构映射,其中最后一个属性定义了相关属性:
"translator": {
"type": "TabularTranslator",
"schemaMapping": {
"id": "id",
"type": "type",
"lead_verb": "lead_verb",
"lead_action_performed": "lead_action_performed",
"created_at": "created_at",
"lead_id": "lead_id",
"selected_action": "selected_action",
"rate_type": "rate_type",
"channel_rate_id": "channel_rate_id",
"tenant_id": "tenant_id",
"unit_id": "unit_id",
"created_by_id": "created_by_id",
"source_id": "source_id",
"lead_changes_humanized.Quoted Rate[1]": "lead_changes_humanized"
},
"collectionReference": "$.lead_events"
}
这会导致以下错误:
{
"errorCode": "2200",
"message": "ErrorCode=UserErrorInvalidJsonArrayPathDefinition,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Error occurred when deserializing source JSON data. Please check whether the JsonPath in JsonNodeReference and JsonPathDefintion is valid.,Source=Microsoft.DataTransfer.Common,''Type=Newtonsoft.Json.JsonException,Message=Unexpected character while parsing path: ,Source=Newtonsoft.Json,'",
"failureType": "UserError",
"target": "cpyCompaniesLeadEvents"
}
我尝试引用路径如下:
"lead_changes_humanized."Quoted Rate"[1]": "lead_changes_humanized"
并且,用单引号:
"lead_changes_humanized.'Quoted Rate'[1]": "lead_changes_humanized"
这些都会导致相同的错误。我已经使用路径验证器验证了 JSON 路径。
问题:如何处理此空格?
已尝试跳过复制活动验证程序,但失败。请考虑以下解决方法。
1.如果您可以完全控制其余 api(名为 A(输出,请尝试将lead_changes_humanized.Quoted Rate[1]
作为 lead_changes_humanized.Quoted_Rate[1]
返回。如果不能,请创建另一个自己的 rest api(名为 B(,并在 B rest API 中调用 A rest api,然后将输出处理为 lead_changes_humanized.Quoted_Rate[1]
。
2.然后你可以用这个技巧跳过验证器。如果您确实关注 json 密钥的原始格式,请执行下一步。
3.在sql db端,您可以将源数据中的数据复制到临时表中。并在存储过程中还原原始格式,以便可以将原始格式存储到确切的目标表中。我在以前的案例中执行了非常详细的步骤:Azure 数据工厂映射一列中的 2 列引用它。