这是我的javascript,它准备用于匹配api响应的json
var squArray = []
for (j = loopincri; j < (loopincri + skuCount); j++) {
var skuJson = {
"skuCode": skuCodes[j],
"quantity": quantity
}
squArray.push(skuJson)
}
当我打印时,它是这样的:
{
"0": {
"sku_code": "50",
"quantityNO": 2,
"min": 550,
"max": 13000,
"dtePrice": {
"0": {
"date": "2019-04-11",
"listPrice": 6600,
"salePrice": 3870
},
"1": {
"date": "2019-04-12",
"listPrice": 6600,
"salePrice": 3870
}
}
}
}
但是我希望结果像
[
{
"sku_code": "50",
"quantityNO": 2,
"min": 550,
"max": 13000,
"dtePrice": [
{
"date": "2019-04-11",
"listPrice": 6600,
"salePrice": 3870
},
{
"date": "2019-04-12",
"listPrice": 6600,
"salePrice": 3870
}
]
}
]
您能帮我这个忙吗? 由于api的响应是我想要的格式
答案 0 :(得分:0)
是的,如果您在JS中执行过多操作,则数组存在问题:https://stackoverflow.com/a/54256766/143475-因此,如果您执行karate.read()
创建JSON块,它应该开始工作。
我的建议是尽可能避免使用JS,尝试使用Karate本机进行循环和转换等。例如:
* def skuCodes = ['a', 'b', 'c', 'd', 'e']
* def nums = []
* eval for(var i = 0; i < 5; i++) nums.add(~~i)
* def fun = function(x){ return { skuCode: skuCodes[x], array: read('array.json') } }
* def json = karate.map(nums, fun)
是的,使用read()
会带来一些不便,但是请注意,您可以在JSON文件中使用嵌入式表达式。这将在空手道的未来版本中修复。
答案 1 :(得分:0)
这可能是解决https://stackoverflow.com/a/54256766/8615449
中讨论的jdk错误的解决方法与其直接返回您的对象, 尝试
return Java.type("com.intuit.karate.JsonUtils").toJson(squArray)
我知道此返回字符串格式的JSON,您可以通过以下方式将其强制转换为功能
* json myJson = JsFunction()
此处JsFunction()
是您在上面创建的函数,该函数返回该json值。
答案 2 :(得分:-1)
不知道空手道JS。但是,如果空手道JS将数组转换为对象,则可以将其转换为数组。如您所见,生成的对象类似于array,可以使用“ Array.from(queryObject)”方法轻松将其转换为array。 修改:-
var squArray = []
for(j=loopincri ; j<(loopincri+skuCount); j++){
var skuJson = {"skuCode":skuCodes[j],
"quantity":quantity};
squArray.push(skuJson);
}
let squArray = Array.from(squArray);