如何使用XSLT将指定JSON Payload重构为目标格式?
使用XSLT重构JSON格式
原始JSON
{ "data": { "USDCHF:CUR": { "PX_LAST": 104.4872, "CHG_PCT_1D": 0.3148063, "CHG_NET_1D": 0.3279, "LONG_COMP_NAME": "Bloomberg Commodity Index" }, "BCOMPR:IND": { "PX_LAST": 217.4836, "CHG_PCT_1D": 0.4914518, "CHG_NET_1D": 1.0636, "LONG_COMP_NAME": "Bloomberg Precious Metals Subindex" } } }
目标JSON
{ "data": { "Ticker": { "Ticker_Name": "USDCHF:CUR", "PX_LAST": 104.4872, "CHG_PCT_1D": 0.3148063, "CHG_NET_1D": 0.3279, "LONG_COMP_NAME": "Bloomberg Commodity Index" }, "Ticker": { "Ticker_Name": "BCOMPR:IND", "PX_LAST": 217.4836, "CHG_PCT_1D": 0.4914518, "CHG_NET_1D": 1.0636, "LONG_COMP_NAME": "Bloomberg Precious Metals Subindex" } } }
实现XSLT代码
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="json" indent="yes"/> <xsl:template match="/"> <xsl:map> <xsl:map-entry key="'data'"> <xsl:map> <!-- 遍历原始data节点下的所有子项 --> <xsl:for-each select="?data?*"> <xsl:map-entry key="'Ticker'"> <xsl:map> <!-- 将原键名转为Ticker_Name字段 --> <xsl:map-entry key="'Ticker_Name'" select="name()"/> <!-- 复制原对象的所有属性 --> <xsl:for-each select="?*"> <xsl:map-entry key="name()" select="."/> </xsl:for-each> </xsl:map> </xsl:map-entry> </xsl:for-each> </xsl:map> </xsl:map-entry> </xsl:map> </xsl:template> </xsl:stylesheet>
说明
- 需使用支持XSLT 3.0的处理器(如Saxon),该版本原生支持JSON的解析与生成
- 核心逻辑:遍历原始
data下的每个键值对,把原键名作为Ticker_Name的值,同时保留原对象的所有字段,最终以Ticker作为每个条目的键名
内容的提问来源于stack exchange,提问作者Yazan Mohammad
相关产品推荐
相关产品推荐

