代码之家  ›  专栏  ›  技术社区  ›  monch1962

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

  •  0
  • monch1962  · 技术社区  · 7 年前

    <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 回复  |  直到 7 年前
        1
  •  1
  •   oguz ismail FCulig    7 年前

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

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

    @html 是英语的简写 . | @html .

        2
  •  1
  •   Amadan    7 年前

    你可以用 --arg 定义一个变量;你可以用 "$(<...)"

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

    但是,您可能不需要XML转义,如注释中所述;不考虑这一点会让你

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

    编辑:在第二个命令中输入错误。