Parsing Groovy:实现JsonSlurper就是给出一个JsonException——通常是有效的

Parsing Groovy:实现JsonSlurper就是给出一个JsonException——通常是有效的,parsing,groovy,soapui,jsonslurper,Parsing,Groovy,Soapui,Jsonslurper,我正在尝试在SoapUI中构建一个json请求,并尝试发布到测试步骤。对于构建请求,我有以下代码。当我执行它时,它抛出了一个JsonException(下面提供的文本)。任何建议都将不胜感激。我已经做了60多个服务(所以我做了1001次),所有这些服务都通过了/成功了。我无法准确指出这里的问题是什么。谢谢 import groovy.json.JsonSlurper import groovy.json.JsonOutput def setReqPayload ( pArrKeyValues

我正在尝试在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 ) )
您的JSON中有,不幸的是无效,它应该是通常的空格字符

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

如果希望启用轻松的JSON解析,请使用LAX,即允许 注释、无引号字符串等

因此,如果无法在源位置清理数据,可以按如下方式进行过滤:

jsonPayload = jsonPayload.replace('\u00a0', '\u0020')

看起来脚本中有一些小问题

以下脚本:

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}

预期输出是什么?非常感谢您的回复!这就解决了问题。我无法使用replace/replaceAll(使用Regex),因此我在记事本中重新构建了json。这基本上去掉了不间断的空格字符。再次感谢!谢谢你的回复。以上Hugues Moreau提供的解决方案解决了我的问题。