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

Karate框架读取Java long大数字报错问题咨询

问题描述

我有一个JSON文件,内容如下:

[{
   "large_num": 6168465146545
}]

调用Karate的read方法读取该文件时:

* def data = read("my-file.json")

出现如下报错:

js failed:
>>>>
01: read("my-file.json")
<<<<
org.graalvm.polyglot.PolyglotException: js failed:
>>>>
.....
<<<<
org.graalvm.polyglot.PolyglotException: java.lang.AssertionError
- com.oracle.truffle.polyglot.HostToGuestRootNode.execute(HostToGuestRootNode.java:125)
- org.graalvm.polyglot.Value.as(Value.java:1642)
.....

使用较小的Java int类型数值时无此问题,当前使用Karate版本为v1.5.0.RC3。

解决方案
  • 方法1:将JSON大数值转为字符串格式
    修改JSON文件,把长整型数值用引号包裹为字符串:

    [{
       "large_num": "6168465146545"
    }]
    

    后续需要使用数值时,可通过Karate的类型转换方法转为数字:

    * def num = parseInt(data[0].large_num)
    
  • 方法2:升级Karate到稳定正式版
    v1.5.0.RC3是预览版本,存在大数值解析的已知bug。直接升级到v1.5.0正式版或更高稳定版本,新版本已修复长整型数值的JSON解析兼容问题。

  • 方法3:自定义JSON解析逻辑(针对无法升级版本的场景)
    绕过GraalJS的默认解析,改用Jackson处理JSON读取,在测试脚本中添加:

    * def mapper = com.fasterxml.jackson.databind.ObjectMapper.newInstance()
    * def data = mapper.readValue(karate.readAsString("my-file.json"), com.fasterxml.jackson.databind.JsonNode)
    

    这样可以确保大长整型数值被正确解析为Java的Long类型,避免溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:54:55