0

我正在尝试在 SoapUI 中构建 json 请求并尝试发布到测试步骤。为了构建请求,我有以下代码。当我执行它时,它会抛出一个 JsonException (下面提供的文本。)任何建议将不胜感激。我已经为 60 多项服务完成了此操作(所以我已经完成了 1001 次)并且所有这些服务都已通过/工作。我无法确定这里的问题是什么。谢谢!

import groovy.json.JsonSlurper
import groovy.json.JsonOutput

def setReqPayload ( pArrKeyValues ) {//[objId, dirInd, selActId, actDt, coType, secId]
    def jsonPayload = '''   
    {
        "objectId" : "",
        "actDate": "",
        "dirIndicator" : "",
        "selectActId" : "",
        "coInfo" : {"secId" : "","coType" : ""}
    }
    '''
    // parse the request
    def jsonReq = new JsonSlurper ( ).parseText ( jsonPayload )

    jsonReq.objectId        = pArrKeyValues [ 0 ] )             
    jsonReq.dirIndicator    = pArrKeyValues [ 1 ]
    jsonReq.selectActId     = pArrKeyValues [ 2 ]
    jsonReq.actDate         = pArrKeyValues [ 3 ]
    jsonReq.coInfo.coType   = pArrKeyValues [ 4 ]
    jsonReq.coInfo.secId    = pArrKeyValues [ 5 ]

    log.info "REQUEST JSON SLURP: " + jsonReq
    return jsonReq
}

例外:

ERROR:groovy.json.JsonException: expecting '}' or ',' but got current char ' ' with an int value of 160 The current character read is ' ' with an int value of 160

我也使用下面的代码进行解析,但这会引发不同类型的异常(不是那种映射)并且不允许我将值设置为键。

// parse the request
def parser = new JsonSlurper ( ).setType ( JsonParserType.LAX )
def jsonReq = JsonOutput.toJson ( parser.parseText ( jsonPayload ) )
4

2 回答 2

0

您的 JSON 中有不间断的空格字符,不幸的是它无效,它应该是通常的空格字符。

使用 LAX 模式是个好主意,但它似乎无法处理不间断的空格:

如果您想启用宽松的 JSON 解析,即允许注释、禁止引用字符串等,请使用 LAX。

所以如果你不能从源头清理你的数据,你可以像这样过滤它:

jsonPayload = jsonPayload.replace('\u00a0', '\u0020')
于 2017-05-25T20:47:18.987 回答
0

看起来你在脚本中有一些琐碎的问题。

下面的脚本:

import groovy.json.JsonSlurper
import groovy.json.JsonOutput

def setReqPayload ( pArrKeyValues ) {//[objId, dirInd, selActId, actDt, coType, secId]
    def jsonPayload = '''   
    {
        "objectId" : "",
        "actDate": "",
        "dirIndicator" : "",
        "selectActId" : "",
        "coInfo" : {"secId" : "","coType" : ""}
    }
    '''
    // parse the request
    def jsonReq = new JsonSlurper ( ).parseText ( jsonPayload )

    jsonReq.objectId        = pArrKeyValues [ 0 ]         
    jsonReq.dirIndicator    = pArrKeyValues [ 1 ]
    jsonReq.selectActId     = pArrKeyValues [ 2 ]
    jsonReq.actDate         = pArrKeyValues [ 3 ]
    jsonReq.coInfo.coType   = pArrKeyValues [ 4 ]
    jsonReq.coInfo.secId    = pArrKeyValues [ 5 ]

    println "REQUEST JSON SLURP: " + jsonReq
    return jsonReq
}
​setReqPayload([1,2,3,4,5,6])​

产生以下输出:

{actDate=4, coInfo={coType=5, secId=6}, dirIndicator=2, objectId=1, selectActId=3}
于 2017-05-26T04:22:02.610 回答