我的目标是使用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的原始输入和混音选项可以通过类似jq -Rs '{ text: . }' file.html
的方式(根据此Stack overflow question来解决此问题,JQ提供了一种@json的转义HTML的方法,但是在许多Web搜索和尝试之后我都失败了,最好运行一个JQ命令来对HTML 进行编码/字符串化,然后将HTML插入.json文件。
此问题中描述的解决方案是我解决问题的尝试,并且我希望我的基本假设和方法是否不如其他可能的方法逊色。
谢谢。
答案 0 :(得分:3)
如果您的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
答案 1 :(得分:2)
关于编码HTML文件的“奖励问题”,您可以简单地使用过滤器@html
,例如
.content.text=($text | @html)
在线手册中:
@html:
通过将字符<>&'“映射到它们的字符来应用HTML / XML转义 实体等价物<,>,&,',“。