如何使用jq工具合并两个本地化JSON文件并按语言重构嵌套结构
Shell脚本中使用jq合并本地化JSON文件方案
前置准备
将两份语言文件分别保存到当前脚本运行目录:
- 日语文件命名为
ja.json,内容为:
{ "link_generate": "ランダム化する", "label_apple": "リンゴ" }
- 英语文件命名为
en.json,内容为:
{ "link_generate": "Randomise", "label_apple": "Apple" }
合并命令
直接在shell中执行以下jq命令即可生成目标结构的合并文件:
jq -n \ --slurpfile ja ja.json \ --slurpfile en en.json ' $ja[0] as $jaObj | $en[0] as $enObj | reduce (($jaObj + $enObj) | keys_unsorted[]) as $key ( {}; .[$key] = { en: $enObj[$key], ja: $jaObj[$key] } ) ' > merged.json
参数说明
-n:启用空输入模式,从零构造输出的JSON结构,不依赖标准输入内容--slurpfile:将指定JSON文件的内容读取为绑定变量,读取结果为数组格式,取索引0的元素就是文件对应的根JSON对象- 核心逻辑:取两份语言文件所有键的并集做遍历,为每个键生成嵌套的语言层级对象,分别从对应语言文件中取值填充
输出结果
执行完成后,merged.json的内容完全符合预期结构:
{ "link_generate": { "en": "Randomise", "ja": "ランダム化する" }, "label_apple": { "en": "Apple", "ja": "リンゴ" } }
扩展提示
如果后续需要新增其他语言,只需要追加对应--slurpfile参数读取新的语言文件,在键的构造块中新增对应语言代码的赋值即可,不需要修改核心遍历逻辑。
内容的提问来源于stack exchange,提问作者Suin
相关产品推荐
相关产品推荐

