Jmeter JDBC 请求中有没有办法将 "result variable" 数据转换为 Json 格式?

Is there a way in Jmeter JDBC request to convert "result variable" data into Json format?

我正在将 Jmeter JDBC REquest 数据存储在结果变量中,结果变量的格式如下: [[alt_id:535644, cd:A, cube:1.000, stat_dt:null, ts:9999-12-31T00:01]]

我尝试了以下将其转换为 JSON 但没有成功:

def resl = vars.getObject('jdbc_dcRes');
log.info("Jdbc result : " + resl);
def json = new groovy.json.JsonBuilder(resl).toPreetyString();
OR
def json = new groovy.json.JsonBuilder(resl).toString();
log.info("Jdbc result Converted into Json : " + json);

获取: 2022-02-11 15:31:51,971 错误 o.a.j.JMeter:线程 Thread[dc Service 1-1,6,main] 中未捕获的异常 java.lang.WhosebugError:空 在 java.util.concurrent.ConcurrentHashMap.putVal(未知来源)~[?:1.8.0_111] 在 java.util.concurrent.ConcurrentHashMap.putIfAbsent(未知来源)~[?:1.8.0_111] 在 java.lang.ClassLoader.getClassLoadingLock(未知来源)~[?:1.8.0_111] 在 java.lang.ClassLoader.loadClass(未知来源)~[?:1.8.0_111] 在 sun.misc.Launcher$AppClassLoader.loadClass(未知来源)~[?:1.8.0_111] 在 java.lang.ClassLoader.loadClass(未知来源)~[?:1.8.0_111] 在 java.lang.ClassLoader.loadClass(未知来源)~[?:1.8.0_111] 在 java.lang.Class.forName0(本机方法)~[?:1.8.0_111] 在 java.lang.Class.forName(未知来源)~[?:1.8.0_111] 在 groovy.lang.MetaClassRegistry$MetaClassCreationHandle.createWithCustomLookup(MetaClassRegistry.java:144) ~[groovy-3.0.7.jar:3.0.7] 在 groovy.lang.MetaClassRegistry$MetaClassCreationHandle.create(MetaClassRegistry.java:139) ~[groovy-3.0.7.jar:3.0.7] 在 org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:272) ~[groovy-3.0.7.jar:3.0.7]

..............

任何克服此问题的指示都会有所帮助。谢谢

对我来说,下面的代码片段工作得很好:

def resl = vars.getObject('jdbc_dcRes')

def json = new groovy.json.JsonBuilder(resl).toPrettyString()

log.info('Jdbc result Converted into Json :' + json)

演示:

我使用的是普通 MySQL database 8.0.28 和以下查询:

select * from help_category limit 2

所以您可能想尝试复制上面的内容,如果它会成功 - 最有可能的问题是您的数据库中的数据无法使用 Groovy' 转换为 JSON' s JsonBuilder 没有额外的转换(即你有不能一对一映射到 JSON 数据类型的特定数据类型)

请参阅 Debugging JDBC Sampler Results in JMeter 了解更多关于 JMeter 的 JDBC 请求采样器

中称为“结果变量名称”的野兽的剖析