background
Recently, the project needs to test the performance of creating orders, but the surcharge input parameter when creating orders is very complex. There is a large section of surcharge to be constructed, and the surcharge of different products is different. The data structure is array type.
difficulty
Most of the online tutorials extract json and strings. There is little introduction to array splicing. It took a little time and finally found a relatively simple way.
Although BeanShell Sampler can also be implemented, it is very complex to write. It only supports java syntax. You have to write everything yourself. It is difficult to locate errors. However, you are not very familiar with java syntax and are a little familiar with python.
terms of settlement
JSR223 component elements are introduced, which provides the possibility of developing tests using a variety of programming languages, including Groovy language with high performance.
When developing tests using JSR223 component elements, you can use its built-in variables, which helps to streamline scripts and improve the efficiency of development tests.
I chose JSR223 PostProcessor here. You can see that there are both java syntax and other syntax.
Define a list:
def blCharge = [];
Add elements to the list
gp20Charge << "{\"chargeName\":\"Sea freight\",\"chargeType\":\"OCEAN_FEE\",\"price\":111,\"currency\":\"USD\",\"toCurrency\":\"USD\",\"transitPortId\":null,\"paymentTermsType\":\"P\"}";
List of common built-in variables
variable | function |
---|---|
ctx | Access the context of the current thread |
vars | Read and write current variables |
props | Read and write current properties |
sampler | Access current sampler |
prev | Access current sampler results |
log | Write log file |
Usage example: prev getResponseDataAsString(); // Get the Response, which is a string and needs to be converted to a json object
Attention
String chargeType = responseObj.get(0).get("chargeInfo").get(0).get("chargeDetail").get(i).get("chargeType");
If the result returned by the following fields is null, the result of chargeType is the string "null", which is not a good solution.
The full version code is as follows
import com.alibaba.fastjson.*; String response = prev.getResponseDataAsString(); // Get the Response, which is a string and needs to be converted to a json object List responseObj = JSON.parseArray(response); // Convert the entire Response to a JSON object log.info(responseObj.get(0).get("chargeInfo").get(0).get("chargeDetail").size().toString()); blChargeSize = responseObj.get(0).get("chargeInfo").get(0).get("chargeDetail").size(); gp20ChargeSize = responseObj.get(0).get("chargeInfo").get(1).get("chargeDetail").size(); gp40ChargeSize = responseObj.get(0).get("chargeInfo").get(2).get("chargeDetail").size(); hq40ChargeSize = responseObj.get(0).get("chargeInfo").get(3).get("chargeDetail").size(); def blCharge = []; def gp20Charge = []; def gp40Charge = []; def hq40Charge = []; gp20Charge << "{\"chargeName\":\"Sea freight\",\"chargeType\":\"OCEAN_FEE\",\"price\":111,\"currency\":\"USD\",\"toCurrency\":\"USD\",\"transitPortId\":null,\"paymentTermsType\":\"P\"}"; gp40Charge << "{\"chargeName\":\"Sea freight\",\"chargeType\":\"OCEAN_FEE\",\"price\":222,\"currency\":\"USD\",\"toCurrency\":\"USD\",\"transitPortId\":null,\"paymentTermsType\":\"P\"}"; hq40Charge << "{\"chargeName\":\"Sea freight\",\"chargeType\":\"OCEAN_FEE\",\"price\":333,\"currency\":\"USD\",\"toCurrency\":\"USD\",\"transitPortId\":null,\"paymentTermsType\":\"P\"}"; for (int i ;i<blChargeSize;i++){ String chargeName = responseObj.get(0).get("chargeInfo").get(0).get("chargeDetail").get(i).get("chargeName"); String chargeType = responseObj.get(0).get("chargeInfo").get(0).get("chargeDetail").get(i).get("chargeType"); String currency = responseObj.get(0).get("chargeInfo").get(0).get("chargeDetail").get(i).get("currency"); String chargeHisId = responseObj.get(0).get("chargeInfo").get(0).get("chargeDetail").get(i).get("chargeHisId"); String paymentTermsType = responseObj.get(0).get("chargeInfo").get(0).get("chargeDetail").get(i).get("paymentTerms"); String price = responseObj.get(0).get("chargeInfo").get(0).get("chargeDetail").get(i).get("price"); String transhipmentPortId = responseObj.get(0).get("chargeInfo").get(0).get("chargeDetail").get(i).get("transhipmentPortId"); String charge = "{\"chargeName\":\""+chargeName+"\",\"chargeType\":\""+chargeType+"\",\"chargeHisId\":\""+chargeHisId+"\",\"price\":"+price+",\"currency\":\""+currency+"\",\"toCurrency\":\"CNY\",\"transitPortId\":"+transhipmentPortId+",\"paymentTermsType\":\""+paymentTermsType+"\"}"; blCharge << charge; } for (int i ;i<gp20ChargeSize;i++){ String chargeName = responseObj.get(0).get("chargeInfo").get(1).get("chargeDetail").get(i).get("chargeName"); String chargeType = responseObj.get(0).get("chargeInfo").get(1).get("chargeDetail").get(i).get("chargeType"); String currency = responseObj.get(0).get("chargeInfo").get(1).get("chargeDetail").get(i).get("currency"); String chargeHisId = responseObj.get(0).get("chargeInfo").get(1).get("chargeDetail").get(i).get("chargeHisId"); String paymentTermsType = responseObj.get(0).get("chargeInfo").get(1).get("chargeDetail").get(i).get("paymentTerms"); String price = responseObj.get(0).get("chargeInfo").get(1).get("chargeDetail").get(i).get("price"); String transhipmentPortId = responseObj.get(0).get("chargeInfo").get(1).get("chargeDetail").get(i).get("transhipmentPortId"); String charge = "{\"chargeName\":\""+chargeName+"\",\"chargeType\":\""+chargeType+"\",\"chargeHisId\":\""+chargeHisId+"\",\"price\":"+price+",\"currency\":\""+currency+"\",\"toCurrency\":\"CNY\",\"transitPortId\":"+transhipmentPortId+",\"paymentTermsType\":\""+paymentTermsType+"\"}"; gp20Charge << charge; } for (int i ;i<gp20ChargeSize;i++){ String chargeName = responseObj.get(0).get("chargeInfo").get(2).get("chargeDetail").get(i).get("chargeName"); String chargeType = responseObj.get(0).get("chargeInfo").get(2).get("chargeDetail").get(i).get("chargeType"); String currency = responseObj.get(0).get("chargeInfo").get(2).get("chargeDetail").get(i).get("currency"); String chargeHisId = responseObj.get(0).get("chargeInfo").get(2).get("chargeDetail").get(i).get("chargeHisId"); String paymentTermsType = responseObj.get(0).get("chargeInfo").get(2).get("chargeDetail").get(i).get("paymentTerms"); String price = responseObj.get(0).get("chargeInfo").get(2).get("chargeDetail").get(i).get("price"); String transhipmentPortId = responseObj.get(0).get("chargeInfo").get(2).get("chargeDetail").get(i).get("transhipmentPortId"); String charge = "{\"chargeName\":\""+chargeName+"\",\"chargeType\":\""+chargeType+"\",\"chargeHisId\":\""+chargeHisId+"\",\"price\":"+price+",\"currency\":\""+currency+"\",\"toCurrency\":\"CNY\",\"transitPortId\":"+transhipmentPortId+",\"paymentTermsType\":\""+paymentTermsType+"\"}"; gp40Charge << charge; } for (int i ;i<gp20ChargeSize;i++){ String chargeName = responseObj.get(0).get("chargeInfo").get(3).get("chargeDetail").get(i).get("chargeName"); String chargeType = responseObj.get(0).get("chargeInfo").get(3).get("chargeDetail").get(i).get("chargeType"); String currency = responseObj.get(0).get("chargeInfo").get(3).get("chargeDetail").get(i).get("currency"); String chargeHisId = responseObj.get(0).get("chargeInfo").get(3).get("chargeDetail").get(i).get("chargeHisId"); String paymentTermsType = responseObj.get(0).get("chargeInfo").get(3).get("chargeDetail").get(i).get("paymentTerms"); String price = responseObj.get(0).get("chargeInfo").get(3).get("chargeDetail").get(i).get("price"); String transhipmentPortId = responseObj.get(0).get("chargeInfo").get(3).get("chargeDetail").get(i).get("transhipmentPortId"); String charge = "{\"chargeName\":\""+chargeName+"\",\"chargeType\":\""+chargeType+"\",\"chargeHisId\":\""+chargeHisId+"\",\"price\":"+price+",\"currency\":\""+currency+"\",\"toCurrency\":\"CNY\",\"transitPortId\":"+transhipmentPortId+",\"paymentTermsType\":\""+paymentTermsType+"\"}"; hq40Charge << charge; } vars.put("blCharge",blCharge.toString()); vars.put("gp20Charge",gp20Charge.toString()); vars.put("gp40Charge",gp40Charge.toString()); vars.put("hq40Charge",hq40Charge.toString()); log.info(blCharge.toString()); log.info(gp20Charge.toString()); log.info(gp40Charge.toString()); log.info(hq40Charge.toString());
Return value parameter (json format, you can analyze it yourself if you are interested)
[{"key":1,"chargeInfo":[{"chargeModel":"BL","cntrSize":null,"chargeDetail":[{"chargeCode":"MSC","chargeName":"Long term product name group test 2","chargeType":"CUS","chargeTag":"OCEAN","price":10,"currency":"USD","chargeHisId":"8aaade9f783a873101783e00efa6007a","transhipmentPortId":null,"category":null,"paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"DOC","chargeName":"DOC","chargeType":"DOC","chargeTag":"POR","price":450,"currency":"CNY","chargeHisId":"8aaa66a9703cbd02017042fe2ce9004f","transhipmentPortId":null,"category":null,"paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Export document service fee 103","chargeType":"BL_LOCAL","chargeTag":"POR","price":50,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b96a7700f2","transhipmentPortId":null,"category":null,"paymentTerms":"P","isFollowOceanFee":false}]},{"chargeModel":"CNTR","cntrSize":"20GP","chargeDetail":[{"chargeCode":"255","chargeName":"Booking fee","chargeType":"CNTR_LOCAL","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa65e76f357234016f35d01224002b","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Booking operation fee","chargeType":"CNTR_LOCAL","chargeTag":"POR","price":50,"currency":"CNY","chargeHisId":"8aaa3dd270aa4d520170adc210e0001a","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Dock security fee","chargeType":"CNTR_LOCAL","chargeTag":"POR","price":2,"currency":"CNY","chargeHisId":"8aaa3dd270aa4d520170adc210d50015","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Container equipment management fee","chargeType":"CNTR_LOCAL","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa3dd270aa4d520170adc210ea001f","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Lead sealing fee SLF","chargeType":"THC","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9fbd6098d","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"THC","chargeType":"THC","chargeTag":"POR","price":646,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9f820078a","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"BKF","chargeName":"Booking operation fee","chargeType":"THC","chargeTag":"POR","price":50,"currency":"CNY","chargeHisId":"8aaa02346b9839da016b984c430c32b1","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"EEC","chargeName":"Container equipment management fee","chargeType":"THC","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa02346b9839da016b984c431b32b6","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Booking fee MIS","chargeType":"THC","chargeTag":"POR","price":180,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9fbb6097e","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Dock security fee PSL","chargeType":"THC","chargeTag":"POR","price":8,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9fbc00983","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"EIR service charge","chargeType":"THC","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9fbca0988","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"SUBTO","chargeName":"subto","chargeType":"CNTR_OCEAN","chargeTag":"OCEAN","price":60,"currency":"USD","chargeHisId":"8aaade9f783a873101783e0854ee0098","transhipmentPortId":null,"category":"OCEAN_EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"MSC","chargeName":"Long term product name group test 2","chargeType":"CNTR_OCEAN","chargeTag":"OCEAN","price":100,"currency":"USD","chargeHisId":"8aaade9f783a873101783e00f0210080","transhipmentPortId":null,"category":"OCEAN_EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"TET","chargeName":"TET","chargeType":"CNTR_OCEAN","chargeTag":"OCEAN","price":111,"currency":"USD","chargeHisId":"8aaaa9137b5c8cb8017b5d9bcbd50163","transhipmentPortId":null,"category":"OCEAN_EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false}]},{"chargeModel":"CNTR","cntrSize":"40GP","chargeDetail":[{"chargeCode":"255","chargeName":"Booking fee","chargeType":"CNTR_LOCAL","chargeTag":"POR","price":40,"currency":"CNY","chargeHisId":"8aaa65e76f357234016f35d01224002b","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Booking operation fee","chargeType":"CNTR_LOCAL","chargeTag":"POR","price":100,"currency":"CNY","chargeHisId":"8aaa3dd270aa4d520170adc210e0001a","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Dock security fee","chargeType":"CNTR_LOCAL","chargeTag":"POR","price":3,"currency":"CNY","chargeHisId":"8aaa3dd270aa4d520170adc210d50015","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Container equipment management fee","chargeType":"CNTR_LOCAL","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa3dd270aa4d520170adc210ea001f","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Lead sealing fee SLF","chargeType":"THC","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9fbd6098d","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"THC","chargeType":"THC","chargeTag":"POR","price":982,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9f820078a","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"BKF","chargeName":"Booking operation fee","chargeType":"THC","chargeTag":"POR","price":100,"currency":"CNY","chargeHisId":"8aaa02346b9839da016b984c430c32b1","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"EEC","chargeName":"Container equipment management fee","chargeType":"THC","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa02346b9839da016b984c431b32b6","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Booking fee MIS","chargeType":"THC","chargeTag":"POR","price":280,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9fbb6097e","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Dock security fee PSL","chargeType":"THC","chargeTag":"POR","price":12,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9fbc00983","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"EIR service charge","chargeType":"THC","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9fbca0988","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"SUBTO","chargeName":"subto","chargeType":"CNTR_OCEAN","chargeTag":"OCEAN","price":90,"currency":"USD","chargeHisId":"8aaade9f783a873101783e0854ee0098","transhipmentPortId":null,"category":"OCEAN_EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"MSC","chargeName":"Long term product name group test 2","chargeType":"CNTR_OCEAN","chargeTag":"OCEAN","price":200,"currency":"USD","chargeHisId":"8aaade9f783a873101783e00f0210080","transhipmentPortId":null,"category":"OCEAN_EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"TET","chargeName":"TET","chargeType":"CNTR_OCEAN","chargeTag":"OCEAN","price":222,"currency":"USD","chargeHisId":"8aaaa9137b5c8cb8017b5d9bcbd50163","transhipmentPortId":null,"category":"OCEAN_EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false}]},{"chargeModel":"CNTR","cntrSize":"40HQ","chargeDetail":[{"chargeCode":"255","chargeName":"Booking fee","chargeType":"CNTR_LOCAL","chargeTag":"POR","price":170,"currency":"CNY","chargeHisId":"8aaa65e76f357234016f35d01224002b","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Booking operation fee","chargeType":"CNTR_LOCAL","chargeTag":"POR","price":100,"currency":"CNY","chargeHisId":"8aaa3dd270aa4d520170adc210e0001a","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Dock security fee","chargeType":"CNTR_LOCAL","chargeTag":"POR","price":3,"currency":"CNY","chargeHisId":"8aaa3dd270aa4d520170adc210d50015","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Container equipment management fee","chargeType":"CNTR_LOCAL","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa3dd270aa4d520170adc210ea001f","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Lead sealing fee SLF","chargeType":"THC","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9fbd6098d","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"THC","chargeType":"THC","chargeTag":"POR","price":982,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9f820078a","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"BKF","chargeName":"Booking operation fee","chargeType":"THC","chargeTag":"POR","price":100,"currency":"CNY","chargeHisId":"8aaa02346b9839da016b984c430c32b1","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"EEC","chargeName":"Container equipment management fee","chargeType":"THC","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa02346b9839da016b984c431b32b6","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Booking fee MIS","chargeType":"THC","chargeTag":"POR","price":280,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9fbb6097e","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"Dock security fee PSL","chargeType":"THC","chargeTag":"POR","price":12,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9fbc00983","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":null,"chargeName":"EIR service charge","chargeType":"THC","chargeTag":"POR","price":30,"currency":"CNY","chargeHisId":"8aaa801870e1e63a0170e2b9fbca0988","transhipmentPortId":null,"category":"EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"SUBTO","chargeName":"subto","chargeType":"CNTR_OCEAN","chargeTag":"OCEAN","price":90,"currency":"USD","chargeHisId":"8aaade9f783a873101783e0854ee0098","transhipmentPortId":null,"category":"OCEAN_EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"MSC","chargeName":"Long term product name group test 2","chargeType":"CNTR_OCEAN","chargeTag":"OCEAN","price":300,"currency":"USD","chargeHisId":"8aaade9f783a873101783e00f0210080","transhipmentPortId":null,"category":"OCEAN_EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false},{"chargeCode":"TET","chargeName":"TET","chargeType":"CNTR_OCEAN","chargeTag":"OCEAN","price":222,"currency":"USD","chargeHisId":"8aaaa9137b5c8cb8017b5d9bcbd50163","transhipmentPortId":null,"category":"OCEAN_EXTRA_CHARGE","paymentTerms":"P","isFollowOceanFee":false}]}]},{"key":1,"chargeInfo":[{"chargeModel":"BL","cntrSize":null,"chargeDetail":[]}]}]