如何将 json 文件中的“Family.age”字段从 27 更新为 40? 我尝试派生该列,但它没有更新该值。我是 ADF 新手,不确定配置是否正确。
{
"Family": {
"first_name": "John",
"last_name": "Smith",
"is_alive": true,
"age": 27,
"address": {
"street_address": "21 2nd Street",
"city": "New York",
"state": "NY",
"postal_code": "10021-3100"
},
"phone_numbers": [
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "office",
"number": "646 555-4567"
}
],
"children": [
"Catherine",
"Thomas",
"Trevor"
]
}
}
此表达式确保保留 Family 对象中的所有元素,并且仅将年龄字段更新为 40(如果是 27)。但是,结果年龄值保持不变。
列:年龄,以及 表达式: iif((Family.age == 27, 40, Family.age)
我尝试使用 select 和派生列更新内部 JSON 值。首先,我提取了内部
age
列并更新为所需的值。然后,我使用派生列转换来生成所需的 JSON。但我无法做到这一点,因为它需要手动提及所有列名称,并且还需要类型转换。
所以,我尝试了以下方法来实现您的要求。仅当您需要 JSON 文件中的输出时,此方法才有效。
首先,使用派生列转换并使用以下表达式创建一个字符串列
str
concat('{"Family":',replace(toString(Family),'"age":27','"age":40'),'}')
上面的表达式将
Family
对象转换为字符串,并用更新后的值替换所需的键和值对,并与外部键名称
Family
连接并生成所需的 JSON 作为字符串,如下所示。
现在,使用选择转换删除额外的列
Family
。在接收器中,使用 csv 数据集生成所需的 JSON。在 csv 数据集中,给出以下配置。
在数据流接收器中,将输出设置为单个文件并给出如下所示的
<filename>.json
。
从管道运行数据流,所需的 JSON 文件将在接收器位置生成。
当您想使用此 JSON 文件时,您需要根据您的要求为此创建一个 JSON 数据集。