SOAPUI中是否有用于基本JSON路径表达式的子字符串方法?



你过去帮了我很大的忙,所以我希望你能帮我这个忙。所以目前我正在做一个项目,在工作中使用soapui来获取一个巨大的Json有效负载。我需要创建一些断言,其中一些需要查看只有一个共同点的多个节点。这是其中一个节点的第一部分。

我要找的是JSONPath的子字符串命令。这是我正在寻找的一个例子。

"BurgerJoints":    [
           {
         "JointName": "Bob's Burgers",
         "Price": 5
         },
        {
         "JointName": "Bob's Broiler Stand",
         "Price": 5
         },
         {
          "JointName": "Burger King",
          "Price": 5
         },
         {
           "JointName": "Bob's Beef Haven",
           "Price": 5
         },
         {
           "JointName": "Super Weenie Hut",
           "Price": 5
         }
 ]

在我的例子中,假设我在寻找所有属于Bob的关节。所以我最初的想法是BurgerJoints [? (@.Substring (JointName 0 3) = ="Bob")),给我节点。但看起来没起作用。谁能告诉我,我的语法哪里出了问题,或者如果没有办法做到这一点,最好的实现我的目标是什么?

谢谢你们了! !

编辑:

所以我试着用Groovyscript来做这件事,我想我已经接近了,但在某个地方列表没有填充。下面是我使用的代码

//imports
import groovy.json.JsonSlurper
//grab the response
def ResponseMessage = messageExchange.response.responseContent
//define a JsonSlurper
def jsonSlurper = new JsonSlurper().parseText(ResponseMessage)
//verify the slurper isn't empty
assert !(jsonSlurper.isEmpty())
def jsonlist =[]
def i = 0
while (jsonSlurper.BurgerJoints[i] != null)
{
if(jsonSlurper.BurgerJoints[i].JointName.toString().substring(0,3)=="Bob")
    {
        jsonlist.add(jsonSlurper.BurgerJoints[i])
    }
    i++
}

def jsonlist2 = new JsonSlurper().parseText(jsonlist.toListString())
assert jsonlist2.size()==3

这是断言JointName列表包含值为3的Bob's的Groovy脚本。请查看内联注释

import groovy.json.JsonSlurper
//Defining json string a fixed value. Of course, you can use dynamic value
//using messageExchange like you shown in your question.
def jsonString = '''
{
"BurgerJoints":    [
           {
         "JointName": "Bob's Burgers",
         "Price": 5
         },
        {
         "JointName": "Bob's Broiler Stand",
         "Price": 5
         },
         {
          "JointName": "Burger King",
          "Price": 5
         },
         {
           "JointName": "Bob's Beef Haven",
           "Price": 5
         },
         {
           "JointName": "Super Weenie Hut",
           "Price": 5
         }
 ]
}
'''
//Parse the string, create slurper object
def json = new JsonSlurper().parseText(jsonString)
//find all JointNames which contains Bob's, and apply size, and assert with 3
assert json.BurgerJoints.findAll { it.JointName.contains('Bob's')}.size() == 3

UPDATE:根据注释,添加额外的语句,帮助实现这个问题的作者正在寻找的。

def jointList = json.BurgerJoints.findAll { it.JointName.contains('Bob's')}
log.info jointList

UPDATE 2:基于另一条注释,验证jointList

中第1和第2的Price是否相等
assert jointList[0].Price == jointList[1].Price

最新更新