2017-05-25 4 views
0

J'essaye de construire une requête json dans SoapUI et essaye de poster à une étape de test. Pour construire la demande, j'ai ci-dessous le code. Quand je l'exécute, il lance une JsonException (texte fourni ci-dessous). Tout conseil serait grandement apprécié. Je l'ai fait pour plus de 60 services (donc je l'ai fait 1001 fois) et tous ont passé/travaillé. Je suis incapable de déterminer exactement la nature du problème. Merci!Groovy: Implémenter JsonSlurper donne une JsonException --- Fonctionne habituellement

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 
} 

Exception:

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 

J'ai utilisé ci-dessous le code aussi bien pour analyser, mais qui est de lancer autre type d'exception (pas ce genre de carte) et ne me permettant pas de définir les valeurs à la clés.

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

Quel est le résultat attendu? – Rao

Répondre

0

Vous avez non-breaking space character(s) dans votre JSON, il est malheureusement invalide, il devrait être le caractère d'espace ordinaire.

Utilisation du mode LAX était une bonne idée, mais il ne semble pas gérer les espaces insécables:

Utilisez LAX si vous souhaitez activer l'analyse syntaxique JSON détendue, à savoir, permettre commentaires, aucune chaîne de citation, etc.

donc, si vous ne pouvez pas nettoyer vos données au comme source, vous pouvez filtrer ceci:

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

Merci beaucoup pour votre réponse! Cela l'a réparé. Je n'ai pas pu utiliser replace/replaceAll (avec Regex) donc j'ai reconstruit le json dans un bloc-notes à nouveau. Cela a essentiellement enlevé les caractères d'espace insécables. Merci encore! – ssc

0

on dirait que vous ha J'ai un problème trivial dans le script.

Ci-dessous le script:

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])​ 

Produit en dessous de la sortie:

{actDate=4, coInfo={coType=5, secId=6}, dirIndicator=2, objectId=1, selectActId=3} 
+0

Merci pour la réponse. La solution fournie par Hugues Moreau ci-dessus a résolu mon problème. – ssc