我有一个带有嵌套数组的大型json请求。数组中的一个字段期望有一个数字。我想在运行时传递此值。我面临的问题是,我传递的值(xyz = 10)被转换为字符串。 该如何处理?
样本功能:
功能:动态json 背景:
* def req1 =
"""
{
"system":
{
"appVersion": "xxx",
"clientIP": "x.y.z.a",
"isPayloadEncrypted": true,
"encryptionKey": ""
},
"payload":
{
"selectedProducts": [
{
"prodCode": "abc",
"paymentMode": "Y",
"selectedOpt": null,
"selectedESOpt": null,
"selectedComponents": [
{
"compoCode": "abc",
"premium": 0,
'term': <xyz>,
'premiumTerm': <xyz>,
"sumAssured": 100000,
},
{
"compoCode": "abc2",
"premium": 0,
'term': <xyz>,
'premiumTerm': <xyz>,
"sumAssured": 100000,
},
]
}
]
}
}
“”“
场景:验证条件 *替换req1.xyz = 10 给定URL baseURL 和路径“ anyPath” 并要求req1 方法发布时 然后状态为200
以某种方式,当生成请求时,它具有: “ term”:“ 10”, “ premiumTerm”:“ 10”,
同时,应该 “期限”:10, “ premiumTerm”:10,
日志错误:
[Fatal Error] :6:3: The element type "meta" must be terminated by the matching end-tag "</meta>".
16:44:43.449 [main] WARN com.intuit.karate - xml parsing failed, response data type set to string: org.xml.sax.SAXParseException; lineNumber: 6;
columnNumber: 3; The element type "meta" must be terminated by the matching end-tag "</meta>".
16:44:43.449 [main] ERROR com.intuit.karate - status code was: 500, expected: 200, response time: 220, url: https://sqs-pacs-poeonline-qa.ocpapps
-dev.pru.intranet.asia/api/compute, response: <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>TypeError: Cannot read property 'transactionId' of undefined<br> at app.use (/usr/app/src/app.js:23:42)<br> &nbs
p;at Layer.handle_error (/usr/app/src/node_modules/express/lib/router/layer.js:71:5)<br> at trim_prefix (/usr/app/src/node_modules/e
xpress/lib/router/index.js:315:13)<br> at /usr/app/src/node_modules/express/lib/router/index.js:284:7<br> at Function.p
rocess_params (/usr/app/src/node_modules/express/lib/router/index.js:335:12)<br> at next (/usr/app/src/node_modules/express/lib/rout
er/index.js:275:10)<br> at /usr/app/src/node_modules/express/lib/router/index.js:635:15<br> at next (/usr/app/src/node_
modules/express/lib/router/index.js:260:14)<br> at Layer.handle_error (/usr/app/src/node_modules/express/lib/router/layer.js:67:12)<
br> at trim_prefix (/usr/app/src/node_modules/express/lib/router/index.js:315:13)</pre>
</body>
</html>
答案 0 :(得分:0)
您确实应该更仔细地阅读文档。对于replace
:
由于replace将结果自动转换为字符串,因此请确保在适用的情况下将类型转换回JSON(或XML)
在type conversion上有一整节内容。
但是无论如何,我认为最适合这种情况的解决方案是embedded-expressions:
* def xyz = 10
* def req1 =
"""
{
"system":
{
"appVersion": "xxx",
"clientIP": "x.y.z.a",
"isPayloadEncrypted": true,
"encryptionKey": ""
},
"payload":
{
"selectedProducts": [
{
"prodCode": "abc",
"paymentMode": "Y",
"selectedOpt": null,
"selectedESOpt": null,
"selectedComponents": [
{
"compoCode": "abc",
"premium": 0,
'term': '#(xyz)',
'premiumTerm': '#(xyz)',
"sumAssured": 100000,
},
{
"compoCode": "abc2",
"premium": 0,
'term': '#(xyz)',
'premiumTerm': '#(xyz)',
"sumAssured": 100000,
},
]
}
]
}
}
"""