可以使用 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()
我有以下 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()