如何通过jq转义XML字符串并将其作为值插入JSON?

时间:2019-01-09 09:30:37

标签: xml jq

我的XML文件中的内容如下:

<blah abc="def">123</blah>

和如下所示的JSON字符串:

{
  "thj": "abc"
}

并且我想使用jq将XML合并到JSON中以获得类似的信息

{
  "thj": "abc", 
  "xml": "&lt;blah abc=\"def\"&gt;123&lt;/blah&gt;"
}

(希望我的XML正确转义了...)

我正在尝试类似的命令

echo $JSON_STRING | jq --slurpfile XML_CONTENT $XML_FILENAME --raw-input '@html' '.xml = "($XML_CONTENT)"'

echo $JSON_STRING | jq @html '.xml' <<< $XML_FILE_CONTENT

echo $JSON_STRING | jq --raw-input --slurpfile XML_CONTENT $XML_FILENAME '.xml = ($XML_CONTENT[0] | @html)

但是我不断收到jq错误

我认为我已经接近正确的答案了……帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用--arg来定义变量;您可以使用"$(<...)"来读取文件并提供参数。

echo "$JSON_STRING" | jq --arg xml "$(<"$XML_FILENAME")" '.xml=($xml | @html)'

但是,您可能不需要注释中提到的XML转义。遗漏那给你

echo "$JSON_STRING" | jq --arg xml "$(<"$XML_FILENAME")" '.xml=$xml'

编辑:在第二个命令中键入。

答案 1 :(得分:1)

使用-R读取XML内容作为原始文本,并提供JSON字符串作为jq的参数。

jq -R --argjson jstr "$JSON_STRING" '$jstr + { "xml" : @html }' "$XML_FILENAME"

@html. | @html的简写。