[英]Insert an HTML file into a JSON file value using JQ
我的目標是使用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 不會將通過API發送的獨立.html文件轉換為HTML內容 ,而是將其視為必須由用戶下載的任何上傳的二進制文件。
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'
sed 's/&/\\&/g; s/"/\\\\\\"/g; s/'"'"'/\\\\\\'"'"'/g'
sed 's/&/\\&/g; s/"/\\\\\\"/g; s/'"'"'/\\\\\\'"'"'/g'
並刪除所有硬性報酬。 我相信JQ的原始輸入和配置選項可以通過jq -Rs '{ text: . }' file.html
jq -Rs '{ text: . }' file.html
(根據這個Stack溢出問題 ,JQ提供了一個轉義HTML的@json方法,但是經過多次網絡搜索和嘗試,我都失敗了。運行一個同時編碼/對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轉義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.