我有以下JSON:
{
"overview_ui": {
"display_name": "my display name",
"long_description": "my long description",
"description": "my description"
}
}
我像这样抓取它:
overview_ui=$(jq -r ".overview_ui" service.json)
然后我想用它来替换另一个JSON文件中的内容:
jq -r --arg updated_overview_ui_strings "${overview_ui}" '.overview_ui.${language} |= $updated_overview_ui_strings' someOtherFile.json
这是可行的,但是它也引入了可见的换行符\n
和转义\
字符,而不是实际将换行符保留为换行符。它为什么要这么做?
"en": "{\n \"display_name\": \"my display name\",\n \"long_description\": \"my long description\",\n \"description\": \"my description\"\n}",
发布于 2019-06-26 16:19:39
您已经将overview_ui
变量作为字符串读取(使用--arg
),因此当您为其赋值时,您已赋值了该字符串(以及格式)。您要么必须将其解析为对象(使用fromjson
),要么直接使用--argjson
。
jq -r --argjson updated_overview_ui_strings "${overview_ui}" ...
不过,您并不需要在多个单独的调用中执行此操作,您可以将文件作为参数读取,以便在一次调用中完成。
$ jq --argfile service service.json --arg language en '
.overview_ui[$language] = $service.overview_ui
' someOtherFile.json
https://stackoverflow.com/questions/56776388
复制