我想在shell脚本中使用jq工具来合并两个本地化的json。
文件内容如下:
ja:
{
"link_generate": "ランダム化する",
"label_apple": "リンゴ"
}
en:
{
"link_generate": "Randomise",
"label_apple": "Apple"
}
我想合并它们并为重复键创建另一个层次结构(ja/en),如:
{
"link_generate": {
"en": "Randomise",
"ja": "ランダム化する"
},
"label_apple": {
"en": "Apple",
"ja": "リンゴ"
}
}
类似
jq -n --slurpfile ja ja.json --slurpfile en en.json '
[ $en[0] | keys[] | { (.):{ en:$en[0][.], ja:$ja[0][.] } } ] | add'
输出{
"label_apple": {
"en": "Apple",
"ja": "リンゴ"
},
"link_generate": {
"en": "Randomise",
"ja": "ランダム化する"
}
}
这是一个针对任意数量语言的解决方案。它使用文件名的前两个字符作为语言键,并遵循字典的非对称填充:
jq -n 'reduce (inputs | to_entries[] | [input_filename[:2], .])
as [$lang, $ent] ({}; setpath([$ent.key, $lang]; $ent.value))' ja.json en.json
语言键列表也可以单独提供(硬编码,或使用--arg
或--argjson
,并按输入文件的顺序匹配):
jq -n 'reduce (("ja","en") as $lang | input | to_entries[] | [$lang, .])
as [$lang, $ent] ({}; setpath([$ent.key, $lang]; $ent.value))' ja.json en.json
演示{
"link_generate": {
"ja": "ランダム化する",
"en": "Randomise"
},
"label_apple": {
"ja": "リンゴ",
"en": "Apple"
}
}