我有一个查找文件,将 ID 从一个系统映射到另一个系统:
[
{
"idA": 2547,
"idB": "5d0bf91d191c6554d14572a6"
},
{
"idA": 2549,
"idB": "5b0473f93d4e53db19f8c249"
},
{
"idA": 2550,
"idB": "5d0bfabc8f20917b92ff07dc"
},
...
Run Code Online (Sandbox Code Playgroud)
我有一个数据文件,其中包含来自以下系统之一的值和 ID:
[
{
"idB": "5d0bf91d191c6554d14572a6",
"description": "Description for 5d0bf91d191c6554d14572a6"
},
{
"idB": "5d0bf49e9236c57281811cfc",
"description": "Description for 5d0bf49e9236c57281811cfc"
},
{
"idB": "5d0bfabc8f20917b92ff07dc",
"description": "Description for 5d0bfabc8f20917b92ff07dc"
},
...
Run Code Online (Sandbox Code Playgroud)
我想生成一个新的描述文件,并将其 ID 转换为idA
查找文件中的值。我试过这个:
jq --slurpfile idmap ids.json 'map( {"description":.description, "id": (.idB as $b|$idmap[][]|select(.idB==$b)|.idA) } )' descriptions.json
Run Code Online (Sandbox Code Playgroud)
但它只产生一个空数组。
我必须双重取消引用,$idmap
因为slurping一个文件“将解析的JSON值的数组绑定到给定的全局变量”——所以这样做$idmap[]
会抛出一个错误,jq:错误(在descriptions.json:70):无法索引数组字符串“idB”。
谁能解释我在这里做错了什么?