jq将文件内容添加到json并更新

时间:2017-03-09 17:02:10

标签: json jq

我正在尝试使用来自REST API GET调用的JSON对象,然后使用jq将原始文件(在本例中为.md文件)的内容添加到其中使用PUT调用更新同一个对象。

我正在使用以下内容获取文件并在本地编写它:

curl -u USERNAME:PASSWORD 'https://example.com/myfile.json' | cat > ./test.json

JSON文件的格式如下:

{
  "content" : "My JSON content",
  "owner":...
}

我想将原始文件的内容添加到content中,结果如下:

{
  "content" : "My markdown file contents.\n\nMy JSON content",
  "owner":...
}

然后使用PUT调用更新原始JSON:

curl -u USERNAME:PASSWORD -d @./test.json -H "Content-Type: application/json" -X PUT 'https://example.com/myfile.json'

我想知道如何将文件内容添加到我的JSON文件中,就像使用jq 一样,如果可能的话?

1 个答案:

答案 0 :(得分:0)

这里简单的jq解决方案的关键是使用' jq -R -s'读取原始文本文件,并使用--arg系列中的一个选项读取JSON。在这里,我将使用--argfile来实现jq版本的简单性和健壮性,但请注意文档说它已被弃用。

在文件中使用以下jq程序,例如program.jq:

. as $file
| $json
| (.content = $file + "\n" + .content)

以及文件contents.txt中的以下文字:

Line 1 of contents.txt;
line 2.

以及curl.json中的以下JSON:

{
  "content": "My JSON content",
  "owner": "etc"
}

调用:

jq -R -s --argfile json curl.json -f program.jq contents.txt

产生

{
  "content": "Line 1 of contents.txt;\nline 2.\n\nMy JSON content",
  "owner": "etc"
}

如果使用bash,而不是将curl输出放入文件中,您可以使用: - argfile json<(curl ....)