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

Karate框架是否内置JSON与XML互转关键字或示例文件?

Karate框架中JSON与XML双向转换的内置支持

绝对有!Karate框架本身就内置了JSON和XML双向转换的能力,完全不需要额外引入第三方库,用起来相当顺手,不管是处理静态的payload还是动态的请求/响应,都有对应的内置函数支持。

核心转换函数

Karate提供了两个核心内置函数来处理互转:

  • karate.xml():将JSON对象/数组转换为XML字符串
  • karate.json():将XML字符串/响应转换为JSON对象

1. JSON转XML示例

如果你的输入是JSON格式的payload,直接用karate.xml()就能完成转换,还可以指定根节点名称(如果JSON是顶级对象,建议指定根节点,避免生成的XML没有明确根元素):

# 定义JSON payload
* def userJson = { id: 123, name: "Preethi", email: "preethi@example.com", roles: ["admin", "user"] }

# 转换为XML,指定根节点为<user>
* def userXml = karate.xml(userJson, 'user')

# 输出查看结果(可选)
* print userXml

生成的XML大概是这样:

<user>
  <id>123</id>
  <name>Preethi</name>
  <email>preethi@example.com</email>
  <roles>admin</roles>
  <roles>user</roles>
</user>

如果是JSON数组,Karate会自动处理为重复的子节点,比如:

* def usersJson = [{name: "A"}, {name: "B"}]
* def usersXml = karate.xml(usersJson, 'users')

生成的XML会包含两个<user>子节点在<users>根节点下。

2. XML转JSON示例

对于XML格式的输入(比如接口响应、静态XML字符串),用karate.json()可以直接转成JSON对象,方便后续的断言或数据处理:

# 定义XML字符串
* def userXml = """
<user id="123">
  <name>Preethi</name>
  <email>preethi@example.com</email>
</user>
"""

# 转换为JSON
* def userJson = karate.json(userXml)

# 断言XML中的属性会被转成带@前缀的键
* match userJson['@id'] == '123'
* match userJson.name == 'Preethi'

如果是接口返回的XML响应,直接用response作为参数传入即可:

Scenario: 把XML响应转成JSON处理
Given url 'https://api.example.com/users/123'
When method get
Then status 200
* def userJson = karate.json(response)
* match userJson.user.name == 'Preethi'

针对Payload Input的实战场景

如果你的测试中需要直接将JSON payload转成XML发送请求,或者反过来,完全可以在请求步骤中直接集成转换逻辑:

场景1:JSON转XML作为请求体发送

Scenario: 发送XML格式的请求(从JSON转换而来)
* def requestJson = { product: { id: 456, name: "Laptop", price: 999 } }
* def requestXml = karate.xml(requestJson)

Given url 'https://api.example.com/products'
And header Content-Type = 'application/xml'
And request requestXml
When method post
Then status 201

场景2:接收XML响应并转成JSON断言

Scenario: 解析XML响应为JSON并验证
Given url 'https://api.example.com/products/456'
When method get
Then status 200
* def productJson = karate.json(response)
* match productJson.product.price == 999
* match productJson.product['@id'] == '456'

额外技巧

  • 对于复杂的XML结构(比如命名空间、特殊字符),Karate的内置函数也能自动处理,不需要额外配置
  • 如果需要自定义转换规则(比如修改节点名称、忽略某些字段),可以结合Karate的karate.map()或karate.filter()函数在转换前后处理数据

内容的提问来源于stack exchange,提问作者Preethi Ravi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:03:43