我有多个 JSON 文件,我正在搜索文件内容的特定元素。如果匹配,则将{metadata}内的父节点和子节点复制到另一个存储。 到目前为止,如果符合条件,它会将整个 JSON 文件复制到另一个 Blob 存储。
示例.json:
{
"record": {
"org":{
"name": "School",
"postalCode": "40121"
},
"metadata": {
"an": "file6.json",
"markings": {
"document": {
"distribution": {
"code": "A"
}
}
},
"publicationDate": {
"date": "2022-11-25"
}
}
}
}
如果条件匹配,则结果sample.json只有元数据{..}将被复制到另一个存储:
"metadata": {
"an": "file6.json",
"markings": {
"document": {
"distribution": {
"code": "A"
}
}
},
"publicationDate": {
"date": "2022-11-25"
}
}
但是我的 ADF 将整个 json 复制到另一个存储。
您可以通过使用临时csv文件来实现您的要求。
创建一个临时 csv 文件,如下所示。
one
1
检查您的条件后,在 if 活动True 活动中创建一个带有以下表达式的设置变量活动。在查找活动中启用firstRow
@concat('{"metadata":',activity('Lookup1').output.firstRow.record.metadata,'}')
在这里,我跳过了 if 活动。
然后以上述临时 CSV 数据集为源进行复制活动。在附加列中,创建一个新列
new
并在动态表达式中给出上述变量,如下所示。
在接收器中,创建一个 CSV 数据集,您可以使用数据集参数作为文件名。提供以下配置,以便它使用 csv 数据集创建 JSON 文件。
将您所需的目标文件名指定为上述参数的
<fiename>.json
。
现在,转到复制活动的映射并将以下表达式作为动态内容。
@json('{
"type": "TabularTranslator",
"mappings": [
{
"source": {
"name": "new",
"type": "String"
},
"sink": {
"type": "String",
"physicalType": "String",
"ordinal": 1
}
}
],
"typeConversion": true,
"typeConversionSettings": {
"allowDataTruncation": true,
"treatBooleanAsNumber": false
}
}')
现在,运行管道,它将为每次迭代创建所需的 JSON 文件,如下所示。