我有以下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}",
答案 0 :(得分:2)
您已将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