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

使用Karate设置JSON值时,Avro命名空间格式键设置失败

解决Karate中带点命名空间键的赋值问题

问题重现

原测试代码尝试为带Avro命名空间格式的键赋值时触发错误:

* def payload = { "name" : { "com.val.str": ""} }
* set payload.name["com.val.str"] = 'hello'
* print payload

报错信息:

Can only add to an array

尝试过的写法均无效:

* set payload.name[com.val.str] = 'hello'
* set payload.name.["com.val.str"] = 'hello'

解决方案

Karate的set语法对带点的键名解析存在特殊处理,可通过以下两种方式解决:

方法1:使用eval执行JavaScript赋值逻辑

直接通过JS语法访问对象属性,避开Karate的表达式解析限制:

* def payload = { "name" : { "com.val.str": ""} }
* eval payload.name["com.val.str"] = 'hello'
* print payload

方法2:先提取子对象再赋值

将包含目标键的子对象存为变量,再直接操作变量的属性:

* def payload = { "name" : { "com.val.str": ""} }
* def nameObj = payload.name
* nameObj["com.val.str"] = 'hello'
* print payload

两种方法都能正确将payload.name["com.val.str"]的值设为hello,输出结果如下:

{ "name": { "com.val.str": "hello" } }

内容的提问来源于stack exchange,提问作者Viswanath Thothadri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:37:14