如何使用XSLT从简单JSON响应中提取jwt字段的值
XSLT提取JSON中jwt字段的解决方案
方案1:XSLT 3.0版本(支持fn:parse-json函数)
如果调度器支持XSLT 3.0,可以直接使用内置JSON解析函数实现精确提取,样式表示例如下:
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions"> <!-- 设置输出为纯文本,无冗余XML标签 --> <xsl:output method="text" encoding="UTF-8" omit-xml-declaration="yes"/> <xsl:template match="/"> <!-- 替换下方的$json_input为调度器中传入JSON响应内容的变量/节点路径 --> <xsl:variable name="json-doc" select="fn:parse-json($json_input)"/> <!-- 提取jwt字段值直接输出 --> <xsl:value-of select="$json-doc('jwt')"/> </xsl:template> </xsl:stylesheet>
方案2:低版本XSLT兼容方案(1.0/2.0通用)
如果不确定XSLT版本,或者调用fn:parse-json报错,可以用字符串截取的方式实现。由于返回的JSON结构固定仅包含jwt字段,该方式兼容性最高:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="UTF-8" omit-xml-declaration="yes"/> <xsl:template match="/"> <!-- 替换下方的$json_input为调度器中传入JSON响应内容的变量/节点路径 --> <xsl:variable name="json_str" select="$json_input"/> <!-- 定位jwt值的起始位置:"jwt":" 之后的第一个字符 --> <xsl:variable name="start_pos" select="string-length(substring-before($json_str, '"jwt":"')) + 7"/> <!-- 提取从起始位置到后续第一个双引号之间的内容即为jwt值 --> <xsl:value-of select="substring-before(substring($json_str, $start_pos), '"')"/> </xsl:template> </xsl:stylesheet>
注意事项
- 需要根据调度器的入参规则,将代码中的
$json_input替换为实际接收JSON响应内容的变量或XPath路径 - 两种方案默认都输出纯文本jwt值,无需额外处理即可直接供给后续任务使用
- 如果调度器默认将响应内容作为根节点文本传入,直接把
$json_input替换为.即可读取根节点的全部文本内容
内容的提问来源于stack exchange,提问作者user3377627
相关产品推荐
相关产品推荐

