【问题标题】:Extracting json fields using XSLT使用 XSLT 提取 json 字段
【发布时间】:2020-03-25 09:33:56
【问题描述】:

我是 XSLT 的新手,目前我有一个 json 字符串,我需要从 json 字符串派生特定字段。我目前正在使用 fn:parse-json 和 map:get 但结果似乎是空的。

下面是示例 sn-p:

<xsl:variable name="json-temp" select="fn:parse-json($json-str)" />

<xsl:variable name="result" select="map:get($json-temp,2)" />

当我尝试打印结果(或)json-temp 时,两者似乎都是空的 - 有人可以在这里帮忙吗?如果我遗漏了什么,请告诉我。

json-str 变量的值如下:

{
"testName":"pppp",
"testID":"1234p",
"testDept":"Dept"
}

【问题讨论】:

  • 您已标记此 ibm-datapower,但您使用的功能仅在 XSLT 3.0 中可用。您确定您的 XSLT 处理器支持 parse-json() 和 map:get() 吗?
  • 嗨 Michael.. 非常感谢您的回复...我正在使用 API Connect 5.087(我对此也完全陌生)...您是否在 IBM API 中遇到过类似的问题陈述连接...如果可以,请您建议尝试的最佳方法
  • 我不知道 API Connect,但如果它实现了 XSLT 3.0,那么我几乎肯定会知道它。您的选择是切换到 XSLT 3.0 处理器(实际上意味着 Saxon)或调用您的环境中可能可用的外部函数(但我无法帮助您)。
  • 谢谢 Michael - 我刚刚了解到正在使用的 API Connect 版本支持 XSLT 2 ...

标签: json xml xslt ibm-datapower


【解决方案1】:

您应该能够在 XPath 3.1 中使用 map:get($json-temp, 'testID')(在 XPath 3 中)或 $json-temp?testID。我不确定您要使用 map:get($json-temp,2) 提取哪个值,因为地图没有值 2 的键,该调用仅对例如有意义map { 2: 'foo' } 提取例如foo.

【讨论】:

  • 嗨马丁,非常感谢您的评论 - 我尝试使用 map:get($json-temp, 'testID'),但同样是空的......事实上我尝试打印 $json -temp,它是空的..不确定我是否在语法上遗漏了任何东西...补充一下,我在 IBM API Connect 中使用 XSLT
  • 我认为我的建议适用于 XSLT 和 XPath 3,不确定 DataPower 是否支持。
  • 是的,你可能是对的 - 在你知道的旧版本的 XSLT 中有没有办法做......你能建议吗
  • 嗨 Martin - 你能帮忙介绍一下 XSLT 2 中的方法吗
  • @PavithranRajendran,抱歉,XSLT 2 不支持 JSON 或没有标准化支持,我不熟悉任何 DataPower 特定的东西,如果它支持 parse-json 那么我希望它支持这些方法我已经展示了,但如果不支持 parse-json,那么我不知道该使用什么,因为我不知道有关 DataPower 的详细信息。
【解决方案2】:

在 DataPower 中使用 JSON 的最佳方式是使用 GatewayScript 而不是 XSLT。如果你真的需要坚持使用 XSLT,你可以尝试使用:

<xsl:variable name="jsonx" select="dp:stringToJSONx($json-str)"/>

从那里,您可以通过在生成的 JSONx 文档上使用 XPath 来提取所需的字段。

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多