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
相关产品推荐
相关产品推荐

