我的json文件包含下面的数据,我要验证的是amount
的值是否为bills[*]. total_electricity_bill
+ admin_charge
的总和。是否有直接在json文件中直接执行此操作的简单方法?
{
"amount": "68671",
"admin_charge": "60000",
"stan": "633105",
"bills": [
{
"produk": "PLNPOSTPAID",
"total_electricity_bill": "00000008671",
},
{
"produk": "PLNPOSTPAID",
"total_electricity_bill": "00000000000",
},
{
"produk": "PLNPOSTPAID",
"total_electricity_bill": "00000000000",
}
],
"material_number": "",
"status": true,
"response_code": "00",
"rc": "00",
"trx_id": ""
}
答案 0 :(得分:1)
也许有一种更优雅的方法,但是以下代码可以工作:
* def resp = """ { "amount": "68671", "admin_charge": "60000", "stan": "633105", "bills": [ { "produk": "PLNPOSTPAID", "total_electricity_bill": "00000008671", }, { "produk": "PLNPOSTPAID", "total_electricity_bill": "00000000000", }, { "produk": "PLNPOSTPAID", "total_electricity_bill": "00000000000", } ], "material_number": "", "status": true, "response_code": "00", "rc": "00", "trx_id": "" } """ * def sum = 0 * def fun = function(x){ var temp = karate.get('sum') + parseFloat(x); karate.set('sum', temp) } * def fnum = function(x){ return parseFloat(x) } * def teb = get resp.bills[*].total_electricity_bill * eval karate.forEach(teb, fun) * def ac = get resp.admin_charge * fun(ac) * match sum == fnum(resp.amount)
答案 1 :(得分:-1)
不使用空手道,而是使用jq,执行检查相当容易:
<file jq '([.admin_charge,.bills[].total_electricity_bill|tonumber]|add)==(.amount|tonumber)'
jq命令用admin_charge
和所有total_electricity
字段都转换为数字的形式构建数组,以便检查amount
字段。
它返回给定示例的true
(如果总和不同,则返回false
。