使用JQ用另一个json修改/修补json

时间:2018-07-20 15:32:47

标签: json internationalization translation jq

给出两个json文件,如下所示:

{
  "items": [
    {
      "name": "Item 1"
    },
    {
      "name": "Item 2"
    },
    {
      "name": "Item 3"
    }
  ]
}

这:

[
  "Item 1 translated",
  "Item 2 translated",
  "Item 3 translated"
]

-是否可以将后者用作前者的补丁?这样最终结果将如下所示:

{
  "items": [
    {
      "name": "Item 1 translated"
    },
    {
      "name": "Item 2 translated"
    },
    {
      "name": "Item 3 translated"
    }
  ]
}

一个用例。想象一个需要本地化的巨大json文件。我们可以只导出要转换为CSV的数据,然后在电子表格中对其进行编辑,然后再导出回json。然后我们可以将其用作原始json的补丁。

1 个答案:

答案 0 :(得分:1)

简而言之:

$ jq -s -f patch.jq object.json array.json

其中patch.jq包含:

.[1] as $array
| .[0]
| .items |= reduce range(0;length) as $i (.; 
              .[$i].name = $array[$i])

很长一段时间:上面有许多替代方法,但是使用“ -s”命令行选项的优点是它可以与所有版本的jq一起使用,并且不需要bash-magic。

字典

与其使用数组作为字典,不如使用字典,即JSON对象,可能会更好。例如,在当前情况下,可以按照以下方式构建字典:

{"Item1": "Item 1 translated", ...}

当然要考虑利弊,但是如果您担心键为混合类型(例如"1"1)的情况,则可以考虑使用字典词典,例如遵循以下原则:

{ "string": {"1": "one}, "number": {"1": 1} }