可以使用 groovy 将 JSON 字符串格式转换为实际格式吗?

Can JSON String format be converted to Actual format using groovy?

我有以下 JSON 来自外部来源的字符串格式:- 这实际上是一种什么样的格式?

{
id=102,
brand=Disha,
book=[{
   slr=EFTR,
   description=Grammer,
   data=TYR,
   rate=true,
   numberOfPages=345,
   maxAllowed=12,
   currentPage=345
   },
   {
   slr=EFRE,
   description=English,
   data=TYR,
   rate=true,
   numberOfPages=345,
   maxAllowed=12,
   currentPage=345
  }]
}

我想将其转换为实际的 JSON 格式,如下所示:-

{
"id": "102",
"brand": "Disha",
"book": [{
    "slr": "EFTR",
    "description": "Grammer",
    "data": "TYR",
    "rate": true,
    "numberOfPages": 345,
    "maxAllowed": "12",
    "currentPage": 345
    },
    {
    "slr": "EFRE",
    "description": "English",
    "data": "TYR",
    "rate": true,
    "numberOfPages": 345,
    "maxAllowed": "12",
    "currentPage": 345
   }]
}

这是否可以使用 groovy 命令或代码实现?

两件事:

  • 您不需要 Groovy Script 测试步骤,当前步骤 3
  • 对于第 2 步,使用以下脚本添加“脚本断言”
  • 在下面的脚本中为您要为其添加请求的 nextStepName 提供步骤名称。
//Provide the test step name where you want to add the request
def nextStepName = 'step4'

def setRequestToStep = { stepName, requestContent ->
    context.testCase.testSteps[stepName]?.httpRequest.requestContent = requestContent   
}

//Check the response
assert context.response, 'Response is empty or null'
setRequestToStep(nextStepName, context.response)

编辑: 根据在聊天中与 OP 的讨论,OP 希望更新 step4 对键的现有请求及其值作为 step2 的响应。

使用示例演示更改输入和所需输出。

假设step2的响应是:

{ 
    "world": "test1"
}

而step4现有的请求是:

{
    "key" : "value",
    "key2" : "value2"
}

现在,OP 想要在 ste4 的请求 中使用第一个响应 更新 key 的值,并且需要的是:

{
    "key": {
        "world": "test1"
    },
    "key2": "value2"
}

这是更新后的脚本,在 Script Assertion 第 2 步中使用它:

//Change the key name if required; the step2 response is updated for this key of step4
def keyName = 'key'

//Change the name of test step to expected to be updated with new request
def nextStepName = 'step4'

//Check response
assert context.response, 'Response is null or empty'

def getJson = { str ->
    new groovy.json.JsonSlurper().parseText(str)
}

def getStringRequest = { json ->
    new groovy.json.JsonBuilder(json).toPrettyString()
}

def setRequestToStep = { stepName, requestContent, key ->
    def currentRequest = context.testCase.testSteps[stepName]?.httpRequest.requestContent
    log.info "Existing request of step ${stepName} is ${currentRequest}"
    def currentReqJson = getJson(currentRequest)
    currentReqJson."$key" = getJson(requestContent) 
    context.testCase.testSteps[stepName]?.httpRequest.requestContent = getStringRequest(currentReqJson)
    log.info "Updated request of step ${stepName} is ${getStringRequest(currentReqJson)}"   
}


setRequestToStep(nextStepName, context.request, keyName)

我们可以使用这行代码将无效的 JSON 格式转换为有效的 JSON 格式:-

 def validJSONString = JsonOutput.toJson(invalidJSONString).toString()