合并两个JSON文件并通过jq重新构造JSON



我想在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"
}
}

相关内容

  • 没有找到相关文章

最新更新