You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XSLT中获取JSON后重命名其键名

用XSLT重命名JSON中的键名

要实现读取指定JSON并将第一个成员的age键重命名为membersAge,可以借助XSLT 3.0的JSON与XML互转功能完成,具体代码及说明如下:

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="json" indent="yes"/>

  <!-- 读取输入的JSON文件并启动处理流程 -->
  <xsl:template match="/">
    <!-- 将JSON转换为XML结构,方便用XSLT节点操作修改内容 -->
    <xsl:variable name="json-xml" select="json-to-xml(unparsed-text('input.json'))"/>
    
    <!-- 处理XML结构,修改指定键名 -->
    <xsl:variable name="modified-xml">
      <xsl:apply-templates select="$json-xml/node()"/>
    </xsl:variable>
    
    <!-- 将修改后的XML转换回带缩进的JSON格式 -->
    <xsl:value-of select="xml-to-json($modified-xml, map{'indent': true()})"/>
  </xsl:template>

  <!-- 匹配members数组的第一个成员对象,专门处理它的键名 -->
  <xsl:template match="array[@key='members']/object[1]">
    <object>
      <!-- 遍历对象的所有字段 -->
      <xsl:for-each select="*">
        <!-- 把age字段替换成membersAge,其他字段保持原样 -->
        <xsl:element name="{if (local-name()='age') then 'membersAge' else local-name()}">
          <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
      </xsl:for-each>
    </object>
  </xsl:template>

  <!-- 其他节点直接原样复制,不做修改 -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

关键逻辑说明

  1. JSON转XML:通过json-to-xml函数将输入JSON转为XML结构,比如原JSON的members数组会变成<array key="members">,成员对象是<object>,age字段对应<age>元素,这样就能用XSLT的节点处理能力修改内容。
  2. 修改键名:专门匹配第一个成员对象,遍历其所有子元素时,将age元素替换为membersAge,其他元素保持不变。
  3. XML转回JSON:用xml-to-json函数把修改后的XML重新转为JSON格式,输出带缩进的易读结果。

输出示例

运行上述XSLT后,输出的JSON中第一个成员的age会被替换为membersAge,其余内容保持原样:

{
  "squadName": "Super hero squad",
  "homeTown": "Metro City",
  "formed": 2016,
  "secretBase": "Super tower",
  "active": true,
  "members": [
    {
      "name": "Molecule Man",
      "membersAge": 29,
      "secretIdentity": "Dan Jukes",
      "powers": ["Radiation resistance", "Turning tiny", "Radiation blast"]
    },
    {
      "name": "Madame Uppercut",
      "age": 39,
      "secretIdentity": "Jane Wilson",
      "powers": [
        "Million tonne punch",
        "Damage resistance",
        "Superhuman reflexes"
      ]
    }
  ]
}

注意:需要使用支持XSLT 3.0的处理器(如Saxon HE/PE/EE)才能运行这段代码,json-to-xml和xml-to-json是XSLT 3.0的标准内置函数。

内容的提问来源于stack exchange,提问作者Ram Prasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:53:11