合并具有不同对象类型(患者和地址)的两个文件
Merge two files with different object types (patients and address)
我有两个文件:
- patient.json:患者本人
- address.json: 患者地址
每个地址患者都包含其患者 ID。
patients.json
:
{
id: 1,
name: "name1"
}
{
id: 2,
name: "name2"
}
patient_address.json
:
{
patient_id: 1,
city: "city1-1",
town: "town1-1"
}
{
patient_id: 1,
city: "city1-2",
town: "town1-2"
}
{
patient_id: 2,
city: "city2-1",
town: "town2-1"
}
我想要的结果是:
{
id: 1,
name: "name1",
address: [
{
city: "city1-1",
town: "town1-1"
},
{
city: "city1-2",
town: "town1-2"
}]
},
{
id: 2,
name: "name2",
address: [
{
city: "city2-1",
town: "town2-1"
}]
}
有什么想法吗?
您的输入文件和预期输出无效 JSON,但暂时忽略它,您可以使用 jq 产生所需的转换,如下所示:
< patients.json jq --slurpfile address patient_address.json '
(reduce $address[] as $a ({};
.[ ($a.patient_id)|tostring].address += [$a | {city,town}] )) as $dict
| . + $dict[.id|tostring]
'
输出:
{
"id": 1,
"name": "name1",
"address": [
{
"city": "city1-1",
"town": "town1-1"
},
{
"city": "city1-2",
"town": "town1-2"
}
]
}
{
"id": 2,
"name": "name2",
"address": [
{
"city": "city2-1",
"town": "town2-1"
}
]
}
有几种方法可以将您的输入转换为 JSON,例如使用 hjson 或类似工具。同样,如果您希望输出为 JSON 数组,您有多种选择,例如使用 map
.
警告:上述解决方案假定 .id|tostring
不会发生任何冲突。例如,如果 .id 始终是整数,就会出现这种情况。
我有两个文件:
- patient.json:患者本人
- address.json: 患者地址
每个地址患者都包含其患者 ID。
patients.json
:
{
id: 1,
name: "name1"
}
{
id: 2,
name: "name2"
}
patient_address.json
:
{
patient_id: 1,
city: "city1-1",
town: "town1-1"
}
{
patient_id: 1,
city: "city1-2",
town: "town1-2"
}
{
patient_id: 2,
city: "city2-1",
town: "town2-1"
}
我想要的结果是:
{
id: 1,
name: "name1",
address: [
{
city: "city1-1",
town: "town1-1"
},
{
city: "city1-2",
town: "town1-2"
}]
},
{
id: 2,
name: "name2",
address: [
{
city: "city2-1",
town: "town2-1"
}]
}
有什么想法吗?
您的输入文件和预期输出无效 JSON,但暂时忽略它,您可以使用 jq 产生所需的转换,如下所示:
< patients.json jq --slurpfile address patient_address.json '
(reduce $address[] as $a ({};
.[ ($a.patient_id)|tostring].address += [$a | {city,town}] )) as $dict
| . + $dict[.id|tostring]
'
输出:
{
"id": 1,
"name": "name1",
"address": [
{
"city": "city1-1",
"town": "town1-1"
},
{
"city": "city1-2",
"town": "town1-2"
}
]
}
{
"id": 2,
"name": "name2",
"address": [
{
"city": "city2-1",
"town": "town2-1"
}
]
}
有几种方法可以将您的输入转换为 JSON,例如使用 hjson 或类似工具。同样,如果您希望输出为 JSON 数组,您有多种选择,例如使用 map
.
警告:上述解决方案假定 .id|tostring
不会发生任何冲突。例如,如果 .id 始终是整数,就会出现这种情况。