簡體   English   中英

使用JQ將HTML文件插入JSON文件值

[英]Insert an HTML file into a JSON file value using JQ

目標

我的目標是使用Jive API和cURL命令將HTML內容推送到Jive內容管理平台。

當前狀態

我可以成功完成此操作,但是我的過程是手動的。 我想通過腳本編寫將HTML插入JSON文件的腳本進一步自動化,Jive需要通過API發布HTML內容。

JSON文件示例

{
    "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文件示例

<html lang="en">
<body>
<h1 id="example">Sample file</h1>
    <p>Sample text</p>
<table>
    <thead>
        <tr class="header">

etc.

cURL示例

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

我嘗試用引號將文件括起來(在編碼和字符串化之后),這也失敗了。

為什么使用cURL和JQ

我正在尋找JQ + cURL解決方案的原因是JQ和cURL都可以使用Bash腳本運行,這是我所知道的唯一編程。

獎金問題

為了使HTML文件成為編碼字符串,我運行sed 's/&/\\&amp;/g; s/"/\\\\\\"/g; s/'"'"'/\\\\\\'"'"'/g' sed 's/&/\\&amp;/g; s/"/\\\\\\"/g; s/'"'"'/\\\\\\'"'"'/g' sed 's/&/\\&amp;/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM