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

Karate Framework中如何在JSON文件传递无引号格式的日期?

问题描述

我有一个获取当前日期的函数:

function() {
    var SimpleDateFormat = Java.type('java.text.SimpleDateFormat');
    var sdf = new SimpleDateFormat('yyyyMMdd');
    var date = new java.util.Date();
    return sdf.format(date);
}

通过* def currDate = getDate()获取日期后,在JSON中使用#(currDate)传递值时,该字段会被自动转为带引号的字符串(例如"20230210"),但接口要求attendanceDate字段必须是无引号的数字格式(如20230210),否则会提示"Invalid Input"错误。如何让JSON中的该字段呈现为无引号的格式?

解决方案

核心原因是当前函数返回的是字符串类型,Karate框架在变量替换时会自动给字符串添加引号。只需将日期值转为数字类型即可解决:

方法1:修改日期函数返回数字

直接在getDate函数中,把格式化后的字符串转为长整型(Long):

function() {
    var SimpleDateFormat = Java.type('java.text.SimpleDateFormat');
    var sdf = new SimpleDateFormat('yyyyMMdd');
    var date = new java.util.Date();
    return Long.parseLong(sdf.format(date)); // 将字符串转成数字
}

之后在JSON中使用#(currDate),生成的字段就会是无引号的数字:

{
  "clientId": "ABC",
  "serviceLine": "DSS",
  "locationId": "VOL",
  "serviceType": "ADC",
  "attendanceDate": 20230210,
  "saId": "123",
  "attendance": "PRESENT",
  "attendanceType": "ATTENDANCE"
}

方法2:定义变量时转换类型

如果不想修改原函数,可以在定义currDate变量时,直接将字符串转为数字:

* def currDate = Number(getDate())

这样后续在JSON中使用#(currDate)时,变量会以数字形式被替换,不会带引号。


内容的提问来源于stack exchange,提问作者Chetna N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:50:14