【发布时间】:2021-11-11 07:35:19
【问题描述】:
我想将“原始”json 数据转换为其他 json 结构。
例如:
def template:
{
"id": "$id",
"practitioner": "$practitioner",
"patient": {
"name": "$patientName",
"familyName": "$patientFamilyName"
}
}
;
我的 data.json 是:
[
{
"id": "id1",
"practitioner": {
"practitionerKey1": "practitionerValue1",
"practitionerKey2": "practitionerValue2"
},
"name": "John",
"familyName": "Smith"
},
{
"id": "id2",
"practitioner": {
"practitionerKey1": "practitionerValue1",
"practitionerKey2": "practitionerValue2"
},
"patientName": "Samuel",
"patientFamilyName": "Schnaider"
}
]
我想要的结果是:
[
{
"id": "id1",
"practitioner": {
"practitionerKey1": "practitionerValue1",
"practitionerKey2": "practitionerValue2"
},
"patient": {
"name": "John",
"familyName": "Smith"
}
},
{
"id": "id2",
"practitioner": {
"practitionerKey1": "practitionerValue1",
"practitionerKey2": "practitionerValue2"
},
"patient": {
"name": "Samuel",
"familyName": "Schnaider"
}
}
]
关于如何映射上述数据 json 并使用带有 JQ 的 json 模板填充它的任何想法?
【问题讨论】:
-
您的模板有缺陷,变量没有定义。它们应该是字段名称(
.id而不是$id等),或者您需要模板定义中的参数(例如def template($id))。否则不清楚如何应用模板。 -
另外,
data.json输入文件的内容和您想要的结果实际上都不是正确的 JSON。不引用字段名称是jq语言中的简写,但它不是 JSON。 -
报价已解决。忽略我的模板方法。我简单地认为可以使用这些替代来实现。但其实我不知道......
-
@pmf - 我认为 OP 希望模板中的“$-strings”被 JSON 中的相应键名替换。这是一种容易出错的方法,但它是可行的。
-
可能是一个错字:数组的第一个对象有键
name和familyName,第二个有patientName和patientFamilyName。两者都被转移到输出中patient下的name和familyName。因此,我在回答中假设输入数组的第一个对象在这里拼写错误。如果这确实是故意的,请纠正我。