我的目标是使用Jive API和cURL命令将HTML内容推送到Jive内容管理平台。
我可以成功地做到这一点,但我的过程是手动的。我想通过脚本将HTML插入到JSON文件中来进一步自动化Jive需要通过API发布HTML内容。
{
"entityType": "document",
"content": {
"type": "text/html",
"text": "ENCODED HTML FILE CONTENT AS A STRING"
},
"type": "document",
"subject": "Document Title",
"visibility": "place",
"parent": "https://<URL>/api/core/v3/places/1579"
}
<html lang="en">
<body>
<h1 id="example">Sample file</h1>
<p>Sample text</p>
<table>
<thead>
<tr class="header">
etc.
curl -X PUT -u username:password -H "Content-Type: application/json" -H "Accept: application/json" -H "Cache-Control: no-cache" -d @file.json "https://<URL>/api/core/v3/contents/12204"
Jive API does not turn a standalone .html file sent over the API into HTML content,而是将其视为任何上传的二进制文件,必须由用户下载。
similar question in Stack Overflow要求以相同的方式插入.txt文件。接受的答案表明我尝试:
jq --slurpfile text file.html '.text=$text' file.json >newfile.json
我试过用引号(在编码和字符串化之后)围绕文件,这也失败了。
我正在寻找JQ + cURL解决方案的原因是JQ和cURL都可以使用Bash脚本运行,这是我所知道的唯一编程。
要使HTML文件成为编码字符串,我运行sed 's/&/\&/g; s/"/\\\"/g; s/'"'"'/\\\'"'"'/g'
并删除所有硬回车。我相信JQ的原始输入和slurp选项可以解决这个问题,比如jq -Rs '{ text: . }' file.html
(根据这个Stack overflow question,JQ提供了一种逃避HTML的@json方法,但经过许多网络搜索和尝试后我都失败了。运行会很好一个JQ命令,它编码/字符串化HTML并将HTML插入.json文件。
这个问题中描述的解决方案是我试图解决我的问题,并且我更广泛地看待我的基本假设和方法是否不如其他潜在方法。
谢谢。
如果您的HTML文件足够短,它可以适合命令行:
jq --arg text "$(<file.html)" '.content.text=$text' file.json >newfile.json
或者,运行额外的jq
副本,但使用任何大小的文件:
jq --slurpfile texts <(jq -Rs file.html) '.content.text=$texts[0]' file.json >newfile.json
关于编码HTML文件的“奖金问题”,您可以简单地使用过滤器@html
,例如:
.content.text=($text | @html)
从在线手册:
@html:
通过将字符<>&'“映射到它们的实体等价物<,>,&,',”来应用HTML / XML转义。