这里是我当前的jq脚本:
def reduce_generateId:
.[] | (. + {generalPractitionerCode: (.UAB_UP + "-" + .UAB_COD_UAB)});
def reduce_generalPractitioner($practitionerRole):
(reduce $practitionerRole[] as $g (
{};
.[$g.oid1 + "-" + $g.oid2].generalPractitioner += ($g | [.id])
)) as $dict
| $dict;
reduce_generateId | reduce_generalPractitioner($generalPractitioner)
我的jq命令是:
jq -s -f merge-patient.jq --argfile generalPractitioner reduced_ids.json reduced_pacient.json
其中reduced_pacient.json
:
{ "UAB_UP": "00003", "UAB_COD_UAB": "3212", "INVENTAT": "02"}
{ "UAB_UP": "00006", "UAB_COD_UAB": "5881", "INVENTAT": "102"}
{ "UAB_UP": "00006", "UAB_COD_UAB": "5751", "INVENTAT": "102"}
和reduced_ids.json
:
[
{
"id": "3e67b455-8cdb-4bc0-a5e1-f90253870fc9",
"oid1": "04374",
"oid2": "INFP3"
},
{
"id": "0f22e5ff-70bc-457f-bdaf-7afe86d478de",
"oid1": "04376",
"oid2": "INF07"
}
]
正如您所看到的,redux_generalPractitioner
直接返回$dict
。我得到这个:
{
"04374-INFP3": {
"generalPractitioner": [
"3e67b455-8cdb-4bc0-a5e1-f90253870fc9"
]
},
"04376-INF07": {
"generalPractitioner": [
"0f22e5ff-70bc-457f-bdaf-7afe86d478de"
]
}
}
{
"04374-INFP3": {
"generalPractitioner": [
"3e67b455-8cdb-4bc0-a5e1-f90253870fc9"
]
},
"04376-INF07": {
"generalPractitioner": [
"0f22e5ff-70bc-457f-bdaf-7afe86d478de"
]
}
}
{
"04374-INFP3": {
"generalPractitioner": [
"3e67b455-8cdb-4bc0-a5e1-f90253870fc9"
]
},
"04376-INF07": {
"generalPractitioner": [
"0f22e5ff-70bc-457f-bdaf-7afe86d478de"
]
}
}
正如你所看到的,我得到了三次$dict
。
我不太明白为什么它生成三个$dict
而不是一个。
如果我只执行reduce_generalPractitioner($generalPractitioner)
,我得到:
{
"04374-INFP3": {
"generalPractitioner": [
"3e67b455-8cdb-4bc0-a5e1-f90253870fc9"
]
},
"04376-INF07": {
"generalPractitioner": [
"0f22e5ff-70bc-457f-bdaf-7afe86d478de"
]
}
}
有什么想法吗?
您的程序输入reduced_pacient.json
是一个由三个对象组成的流。当您设置了--slurp
标志时,脚本的初始上下文是一个由三个元素组成的数组。
首先,您调用reduce_generateId
,它通过迭代.[]
将数组分解为三个项。因此CCD_ 12具有三个输出。
接下来,这些将通过管道输入到reduce_generalPractitioner
函数中,从而运行三次。每次跑步产生一次$dict
,总共产生三次。
记住:尽管函数reduce_generalPractitioner
有一个输入参数,但它也有(就像jq中的每个过滤器一样(一个通用输入上下文(通过管道寻址(,它决定了.
的值以及随后的运行次数。