我正在使用ibm datapower向api发送帖子请求。我使用url-open标签发送帖子,但我遇到了json有效负载问题。理想情况下,我想做这样的事情:
<xsl:stylesheet xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx" version="1.0">
<dp:url-open target="{$url}">
<json:object>
<json:string name="key">value</json:string>
</json:object>
</dp:url-open>
</xsl:stylesheet>
但是,如果我这样做的话,我会得到一个非法的字母&#39; {&#39;错误,因为json没有被字符串化。如果我这样做:
<xsl:variable name="payload">{"key": "value"}</xsl:variable>
<dp:url-open target="{$url}">
<xsl:value-of select="$payload" />
</dp:url-open>
它按预期工作,但它不是非常动态,因为我必须对字符串化对象进行硬编码。有没有办法按照第一个例子创建json对象,然后在发送请求之前进行stringify?
任何想法都非常感激
C
答案 0 :(得分:0)
DataPower附带了一个名为store:///jsonx2json.xsl的样式表,您可以使用该样式表进行转换。像这样:
<xsl:variable name="jsonx">
<json:object>
<json:string name="key">value</json:string>
</json:object>
</xsl:variable>
<xsl:variable name="json">
<xsl:copy-of select="dp:transform('store:///jsonx2json.xsl', $jsonx)"/>
</xsl:variable>
<dp:url-open target="{$url}">
<xsl:value-of select="$json" />
</dp:url-open>
答案 1 :(得分:0)
对'store:///jsonx2json.xsl'使用dp:transform()是一种不好的做法。使用该样式表输出xform操作应直接转到OUTPUT上下文。原因是JSON和XML转义的差异。使用dp:transform(),您很可能会遇到这样的转义问题,因为结果JSON将作为XML字符串处理。
赫尔曼。