首页 > 解决方案 > DataPower:使用 XSLT 将 Json 响应映射到 xml

问题描述

我的 SOR 应用程序正在返回结果集,我正在执行以下二进制编码和解码以检索 json

<xsl:variable name="response_json">
  <xsl:copy-of select="dp:decode(dp:binary-encode($resp/result/binary/node()), 'base-64')"/>
</xsl:varibale>

response_json - {"code":"00", "description":"Success"}.

现在我们如何解析上面的 response_json 并使用 XSLT 将“代码”/“描述”值分配给 xsl:variables 和上下文变量

标签: jsonxsltmappingibm-datapower

解决方案


您有两种选择,IMO 一种好,一种坏...

让我们从您在使用 XSLT 处理 JSON 数据时已经使用的坏方法开始。

更糟糕的选择当然是仅将 JSON 用作文本并检查 XSLT 字符串函数的值codedescription使用它,否则您需要将 JSON 数据转换为可以在 XSLT 中处理的 JSONx,方法是将查询参数转换为 XML . 为此,您需要将 JSON 传递给一个新的 Action (Convert QP),然后再传递给一个新的 Transform。

然后,您可以使用 DP 的 JSONx 来处理您希望在 XSLT 样式表中作为 XML 的任何“JSON”数据操作,并在完成后调用store://jsonx2json.xsl新的 Transform 以将其转换为“真正的”JSON。

我假设您dp:url-open()在变量中获取响应时使用的是 a,但是如果您的服务将 Request/Resoonse 作为 JSON,则上下文 VAR__JSONASJSONX将自动为您保存一个 JSONx 对象,您可以将其用作INPUT任何 XSLT 转换操作。

话虽如此,让我们转向好的解决方案;使用GWS

GWS 添加到 DataPower 以处理 JSON(以及除 XML 之外的任何内容),您也可以使用 XSLT 从 XSLT 调用 GWS dp:gatewayscript()。请参阅此示例:https ://github.com/ibm-datapower/datapower-samples/blob/master/gatewayscript/example-ext-func-dp-gwscript.xsl

如果您的 Transform 没有做任何特定于 XML 的操作,我会将其重写为 GWS!


推荐阅读