Json显示的属性不正确

时间:2017-07-25 09:57:25

标签: json rest groovy soapui

尝试使用SOAP UI和groovy脚本从json收集数据时遇到问题。下面是一个例子json:

{
    "regions": [{
        "hotels": [{
                "roomInformation": [{
                    "hotelRoomId": xxx,
                }],
                "regionId": x,
                "hotelId": xxx,                 
                "providerInformation": {
                    "ratePlanCode": "xxx",
                },
                "providerHotelId": 0000001
            },

            {
                "roomInformation": [{
                    "hotelRoomId": xx,
                }],
                "regionId": x,
                "hotelId": xxx,                 
                "providerInformation": {
                    "ratePlanCode": "ggg",
                },
                "providerHotelId": 0000002
            }
        ],
        "errors": null
    }],
    "errors": null
}

我想要做的是选择providerHotelIdratePlanCode的第一个实例。要做到这一点,我有下面的groovy脚本来解决这个问题:

def alert = com.eviware.soapui.support.UISupport
import groovy.json.JsonSlurper
def response = testRunner.testCase.getTestStepByName("Search Test").getProperty("Response").getValue();

def jsonRes = new JsonSlurper().parseText(response);

def providerhotelid = jsonRes.regions.hotels.providerHotelId[0].toString()
def rateplancode = jsonRes.regions.hotels.providerInformation[0].ratePlanCode.toString()

log.info providerhotelid

testRunner.testCase.setPropertyValue('providerhotelid', providerhotelid)
testRunner.testCase.setPropertyValue('rateplancode', rateplancode) 

这在我的自定义属性中输出如下:

  • providerhotelid - [0000001,0000002]
  • rateplancode - [xxx]

上述内容不正确,因为:

  1. providerhotelid - 当我只想要第一个0000001时,它会显示所有提供商酒店ID。
  2. rateplancode - 是正确的,但它周围显示了一个[],我希望将其删除。对于providerhotelid也一样。
  3. 因此,对于此示例,我的自定义属性应显示:

    • providerhotelid - 0000001
    • rateplancode - xxx

    如何在我的groovy脚本中实现这一目标?

1 个答案:

答案 0 :(得分:1)

以下是您的需求:

//Get all the values, falatten them and get the first one
def providerhotelid = jsonRes.regions.hotels.providerHotelId.flatten()[0]
def rateplancode = jsonRes.regions.hotels.providerInformation.ratePlanCode.flatten()[0]

log.info providerhotelid 
log.info rateplancode

您可以在线快速尝试 Demo