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

问题描述 投票:1回答:2

目标

我的目标是使用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 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

我试过用引号(在编码和字符串化之后)围绕文件,这也失败了。

为什么选择cURL和JQ

我正在寻找JQ + cURL解决方案的原因是JQ和cURL都可以使用Bash脚本运行,这是我所知道的唯一编程。

奖金问题

要使HTML文件成为编码字符串,我运行sed 's/&/\&amp;/g; s/"/\\\"/g; s/'"'"'/\\\'"'"'/g'并删除所有硬回车。我相信JQ的原始输入和slurp选项可以解决这个问题,比如jq -Rs '{ text: . }' file.html(根据这个Stack overflow question,JQ提供了一种逃避HTML的@json方法,但经过许多网络搜索和尝试后我都失败了。运行会很好一个JQ命令,它编码/字符串化HTML并将HTML插入.json文件。

如果这是完全错误的方法......

这个问题中描述的解决方案是我试图解决我的问题,并且我更广泛地看待我的基本假设和方法是否不如其他潜在方法。

谢谢。

json bash curl jq jive
2个回答
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

2
投票

关于编码HTML文件的“奖金问题”,您可以简单地使用过滤器@html,例如:

.content.text=($text | @html)

从在线手册:

@html:

通过将字符<>&'“映射到它们的实体等价物<,>,&,',”来应用HTML / XML转义。

© www.soinside.com 2019 - 2024. All rights reserved.