首页 > 解决方案 > 使用 JQ 将 HTML 文件插入 JSON 文件值

问题描述

目标

我的目标是使用 Jive API 和 cURL 命令将 HTML 内容推送到 Jive 内容管理平台。

当前状态

我可以成功地做到这一点,但我的过程是手动的。我想通过编写将 HTML 插入 Jive 需要通过 API 发布 HTML 内容的 JSON 文件的脚本来进一步自动化。

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 -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'并删除了所有硬返回。我相信 JQ 的原始输入和 slurp 选项可以解决这个问题jq -Rs '{ text: . }' file.html(根据这个Stack overflow question,并且 JQ 提供了一个转义 HTML 的@json方法,但是经过多次网络搜索和尝试我都失败了。这会很好运行一个 JQ 命令,该命令既对 HTML 进行编码/字符串化,又将 HTML插入到 .json 文件中。

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

这个问题中描述的解决方案是我解决问题的尝试,我邀请更广泛的视角来判断我的基本假设和方法是否不如其他潜在方法。

谢谢你。

标签: jsonbashcurljqjive

解决方案


如果您的 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

推荐阅读