2016-07-26 32 views
0

我的JSON響應(返回爲字符串),SOAPUI腳本斷言,當JSON響應回報串

"[{\"Serial\":5,\"Name\":\"hold\",\"Types\":[{\"Serial\":36,\"Id\":5,\"Data\":true}]}]" 

我的劇本斷言,

import groovy.json.JsonSlurper 
def ResponseMessage = messageExchange.response.responseContent 
def jsonSlurper = new JsonSlurper().parseText(ResponseMessage) 
//verify the slurper isn't empty 
assert !(jsonSlurper.isEmpty()) 
assert jsonSlurper.Serial == 5 

但我發現了一個錯誤

「JSON有效負載應以開放式大括號'{'或開放方括號'['。' '''[[\'Serial \」:5,\「Name \」:\「hold \ 」 \ 「類型\」:[{\ 「串行\」:36,\ 「ID \」:5,\ 「數據\」:TR UE}]}]「」被上線發現:1,柱:1"

如何解決這個劇本,我只是想斷言,我的反應不應該是空的,串行等於5

+0

的反應是無效的;它*不應該是一個字符串。您必須修復服務器上的響應。 – JJJ

+0

沒有一個有效的Json響應,我使用http://jsonlint.com/ – Gkm

+1

驗證它。如錯誤消息所示,它是* not * valid。 '「[{\」sysSerial \「:...'是無效的,它應該是'[{」sysSerial「:...'我很確定,如果你將字符串粘貼到jsonlint中,它不會說它是有效的,不要將它重新編碼爲一個字符串 – JJJ

回答

0

所以我通過簡單的正則表達式解決了我自己的問題。

下面是代碼傢伙,

//imports 
import groovy.json.JsonSlurper 

//grab the response 
def ResponseMessage = messageExchange.response.responseContent 

def TrimResponse =ResponseMessage.replaceAll('^\"|\"$','').replaceAll('^ \\[|\\]$','').replaceAll('\\\\','') 

//define a JsonSlurper 
def jsonSlurper = new JsonSlurper().parseText(TrimResponse) 

//verify the slurper isn't empty 
assert !(jsonSlurper.isEmpty()) 

assert jsonSlurper.Serial != null 
assert jsonSlurper.Serial == 5 
assert jsonSlurper.Types[0].Serial == 36 

享受:)