私は2つの.jsonファイルを持って、最初のものはデータが含まれています。JQ - STARTSWITHを使用してマップオブジェクト値()
data.json
[
{"ID_EXT_LARGE":"aaa_1234411","xy":"xyz"},
{"ID_EXT_LARGE":"bbb_1474411","xy":"cfg"},
{"ID_EXT_LARGE":"ccc_8944411","xy":"drt"},
{"ID_EXT_LARGE":"aaa_1234411","xy":"kai"}
]
他方はIDが含まれています:
id_array.json
[
{"ID_EXT":"aaa","ID_WEB":30,"ID_ACC":"one"},
{"ID_EXT":"bbb","ID_WEB":40,"ID_ACC":"two"},
{"ID_EXT":"ccc","ID_WEB":50,"ID_ACC":"three"}
]
これで、ID_EXT_LARGEとID_EXTのマッピングを使用して、data.jsonのオブジェクトに "ID_WEB"と "ID_ACC"プロパティを取得しようとしました。
問題は、ID_EXTにはID_EXT_LARGEの最初の文字しか含まれていないという点です。 - 期待される結果は、(拡張data.jsonファイルである必要があります):
data.json
[
{"ID_EXT_LARGE":"aaa_1234411","ID_WEB":30,"ID_ACC":"one","xy":"xyz"},
{"ID_EXT_LARGE":"bbb_1474411","ID_WEB":40,"ID_ACC":"two","xy":"cfg"},
{"ID_EXT_LARGE":"ccc_8944411","ID_WEB":50,"ID_ACC":"three","xy":"drt"},
{"ID_EXT_LARGE":"aaa_1234411","ID_WEB":30,"ID_ACC":"one","xy":"kai"}
]
私はID_WEBのためにそれを試してみましたが、このような何かを考えていたが、(forループ)だけのアイデアだった:
script.jq
def getIDWEB(id_array);
for i ....
if ."ID_EXT_LARGE"|startswith(id_array[i].ID_EXT) then id_array[i].ID_WEB end
end
;
def setIDWEB(id_array):
.ID_WEB = getIDWEB(id_array)
;
($id_array) as $id_array
| map(setIDWEB($id_array))
おそらく私は複雑すぎると思っています。これは実際には1ライナーですか?
jqに 'INDEX/1'がある場合は、' maketable'の代わりに次のように書くことができます:INDEX(.ID_EXT)| map_values(del(.ID_EXT)) – peak