如何在soapUI Groovy中从GET请求响应取值构造JSON POST请求
搞定Groovy从GET响应提取数据构造POST请求的方法
嘿,作为Groovy新手能成功发起GET请求拿到响应已经超棒啦!针对你要提取特定字段构造POST请求的需求,我来给你一步步拆解实现:
首先,你给出的JSON响应有一点语法小问题(比如键值对之间、数组元素之间缺逗号),我先帮你修正成合法的JSON格式,实际处理时你的响应应该是符合规范的哈:
{ "Id": 12, "Cntid": 3, "MrId": 1257, "Details": [ {"stid": 224, "trqty": 2, "Soh": 22}, {"stid": 224, "trqty": 2, "Soh": 27}, {"stid": 2341, "trqty": 21, "Soh": 89} ] }
接下来用Groovy的原生JSON工具JsonSlurper来处理就非常方便,代码示例如下:
import groovy.json.JsonSlurper import groovy.json.JsonBuilder // 模拟你的GET响应JSON字符串(实际中替换成你拿到的响应内容) def getResponseJson = ''' { "Id": 12, "Cntid": 3, "MrId": 1257, "Details": [ {"stid": 224, "trqty": 2, "Soh": 22}, {"stid": 224, "trqty": 2, "Soh": 27}, {"stid": 2341, "trqty": 21, "Soh": 89} ] } ''' // 1. 解析GET响应的JSON为Groovy的Map结构 def slurper = new JsonSlurper() def responseData = slurper.parseText(getResponseJson) // 2. 提取需要的字段,构造POST请求的数据结构 def postRequestData = [ Id: responseData.Id, Cntid: responseData.Cntid, Details: responseData.Details.collect { detail -> // 只保留stid和trqty字段,过滤掉Soh [stid: detail.stid, trqty: detail.trqty] } ] // 3. 把构造好的数据转成JSON字符串,用于POST请求 def jsonBuilder = new JsonBuilder(postRequestData) def postJson = jsonBuilder.toPrettyString() // 打印结果看看是否符合预期 println(postJson)
代码解释:
- JsonSlurper:Groovy自带的JSON解析工具,能把JSON字符串转成易于操作的Groovy Map/List对象。
- collect方法:Groovy列表的便捷操作,遍历原Details数组,每个元素只保留我们需要的
stid和trqty字段,自动生成新的列表。 - JsonBuilder:用来把Groovy对象转回JSON字符串,
toPrettyString()可以生成格式化的JSON,方便查看。
运行这段代码后,你得到的POST JSON就是你想要的格式:
{ "Id": 12, "Cntid": 3, "Details": [ {"stid": 224, "trqty": 2}, {"stid": 224, "trqty": 2}, {"stid": 2341, "trqty": 21} ] }
如果实际场景中你的GET响应是从HTTP请求直接拿到的(比如用HttpURLConnection或者Groovy的HTTPBuilder),只需要把响应体字符串传入parseText()就行,逻辑是一样的~
内容的提问来源于stack exchange,提问作者farin sa
相关产品推荐
相关产品推荐

