行业知识
使用hutool的beanToMap方法问题,记录一个json转换问题
问题���这样的
项目中使用了BeanUtil.beanToMap(extData)
使用了这个方法,extData这边传了一个json字符串进来后,这边转换后是map是没有值的
这个参数需要的是对象
先注意下
测试数据的入参 result中的extData得是一个对象 ,如果直接传ddd,会是一个json字符串
然后获取的时候用了result.getString("extData");
再传到了BeanUtil.beanToMap(extData) 最终没获取到数据
解决方案 result.getString("extData"); 换成 result.get("extData");
扩展知识点:
原始报文:
其中extData是这样的
{
"extData": {
"request6203": {
"ecToken": "384116642778972104",
"fundRefdAmt": "9.80",
"appRefdSn": "47d505b81dad9e26a092a96fbf81f564",
"cashRefdAmt": "0",
"extData": "",
"appRefdTime": "20240228145655",
"refdType": "ALL",
"totlRefdAmt": "10.00",
"expContent": "{\"isvNo\":\"123456\",\"terminalNo\":\"10000143\",\"merchantNo\":\"102440153110004\"}",
"payOrdId": "ORD440100202402281454530002980",
"psnAcctRefdAmt": "0.20"
},
"response6203": {
"hiFefdSn": "418971041",
"hiTrnsTime": "145657",
"extData": "{\"setldetail\":[{\"fund_pay_type\":\"310100\",\"fund_payamt\":-8.00,\"inscp_scp_amt\":-10.00,\"fund_pay_type_name\":\"\"},{\"fund_pay_type\":\"320100\",\"fund_payamt\":-1.80,\"inscp_scp_amt\":-10.00,\"fund_pay_type_name\":\"基金\"}],\"setlInfo\":{\"setl_time\":\"2024-02-28 14:56:57\",\"cvlserv_pay\":-1.80,\"hifdm_pay\":0.00,\"cvlserv_flag\":\"0\",\"med_type\":\"14\",\"brdy\":\"1995-06-21\",\"naty\":\"01\",\"psn_cash_pay\":0.00,\"certno\":\"440921199506219215\",\"hifmi_pay\":0.00,\"psn_no\":\"44090000000020478540\",\"act_pay_dedc\":0.00,\"mdtrt_cert_type\":\"01\",\"balc\":0.20,\"medins_setl_id\":\"H44170200001202402281456567245\",\"psn_cert_type\":\"01\",\"clr_way\":\"1\",\"hifob_pay\":0.00,\"oth_pay\":0.00,\"medfee_sumamt\":-10.00,\"hifes_pay\":0.00,\"gend\":\"1\",\"mdtrt_id\":\"619103107\",\"acct_pay\":-0.20,\"fund_pay_sumamt\":-9.80,\"fulamt_ownpay_amt\":0.00,\"setl_id\":\"418971041\",\"inscp_scp_amt\":-10.00,\"insutype\":\"310\",\"maf_pay\":0.00,\"psn_name\":\"\",\"psn_part_amt\":-0.20,\"clr_optins\":\"441799\",\"pool_prop_selfpay\":-0.8000,\"psn_type\":\"1102\",\"hifp_pay\":-8.00,\"overlmt_selfpay\":0.00,\"preselfpay_amt\":0.00,\"age\":28.0,\"clr_type\":\"11\"}}",
"hiTrnsDate": "20240228",
"refStatus": "SUCC",
"refdSn": "REF440100202402281456560001853"
}
},
"refundStatus": "1"
}
extData是一个json对象
做测试的时候会这样写
String result1 = "{\n" + " \"extData\": {\n" + " \"request6203\": {\n" + " \"ecToken\": \"384116642778972104\",\n" + " \"fundRefdAmt\": \"9.80\",\n" + " \"appRefdSn\": \"47d505b81dad9e26a092a96fbf81f564\",\n" + " \"cashRefdAmt\": \"0\",\n" + " \"extData\": \"\",\n" + " \"appRefdTime\": \"20240228145655\",\n" + " \"refdType\": \"ALL\",\n" + " \"totlRefdAmt\": \"10.00\",\n" + " \"expContent\": \"{\\"isvNo\\":\\"123456\\",\\"terminalNo\\":\\"10000143\\",\\"merchantNo\\":\\"102440153110004\\"}\",\n" + " \"payOrdId\": \"ORD440100202402281454530002980\",\n" + " \"psnAcctRefdAmt\": \"0.20\"\n" + " },\n" + " \"response6203\": {\n" + " \"hiFefdSn\": \"418971041\",\n" + " \"hiTrnsTime\": \"145657\",\n" + " \"extData\": \"{\\"setldetail\\":[{\\"fund_pay_type\\":\\"310100\\",\\"fund_payamt\\":-8.00,\\"inscp_scp_amt\\":-10.00,\\"fund_pay_type_name\\":\\"\\"},{\\"fund_pay_type\\":\\"320100\\",\\"fund_payamt\\":-1.80,\\"inscp_scp_amt\\":-10.00,\\"fund_pay_type_name\\":\\"吃饭饭付\\"}],\\"setlInfo\\":{\\"setl_time\\":\\"2024-02-28 14:56:57\\",\\"cvlserv_pay\\":-1.80,\\"hifdm_pay\\":0.00,\\"cvlserv_flag\\":\\"0\\",\\"med_type\\":\\"14\\",\\"brdy\\":\\"1995-06-21\\",\\"naty\\":\\"01\\",\\"psn_cash_pay\\":0.00,\\"certno\\":\\"440921199506219215\\",\\"hifmi_pay\\":0.00,\\"psn_no\\":\\"44090000000020478540\\",\\"act_pay_dedc\\":0.00,\\"mdtrt_cert_type\\":\\"01\\",\\"balc\\":0.20,\\"medins_setl_id\\":\\"H44170200001202402281456567245\\",\\"psn_cert_type\\":\\"01\\",\\"clr_way\\":\\"1\\",\\"hifob_pay\\":0.00,\\"oth_pay\\":0.00,\\"medfee_sumamt\\":-10.00,\\"hifes_pay\\":0.00,\\"gend\\":\\"1\\",\\"mdtrt_id\\":\\"619103107\\",\\"acct_pay\\":-0.20,\\"fund_pay_sumamt\\":-9.80,\\"fulamt_ownpay_amt\\":0.00,\\"setl_id\\":\\"418971041\\",\\"inscp_scp_amt\\":-10.00,\\"insutype\\":\\"310\\",\\"maf_pay\\":0.00,\\"psn_name\\":\\"\\",\\"psn_part_amt\\":-0.20,\\"clr_optins\\":\\"441799\\",\\"pool_prop_selfpay\\":-0.8000,\\"psn_type\\":\\"1102\\",\\"hifp_pay\\":-8.00,\\"overlmt_selfpay\\":0.00,\\"preselfpay_amt\\":0.00,\\"age\\":28.0,\\"clr_type\\":\\"11\\"}}\",\n" + " \"hiTrnsDate\": \"20240228\",\n" + " \"refStatus\": \"SUCC\",\n" + " \"refdSn\": \"REF440100202402281456560001853\"\n" + " }\n" + " },\n" + " \"refundStatus\": \"1\"\n" + "}"; 执行了这样的一个方法
JSONObject aaa = JSONObject.parseObject(JSON.toJSONString(result1))
这句是有问题的,因为这样写的话result1本身是一个json字符串了,
JSON.toJSONString(result1) 会得到一个转义的字符串
文ai ,在执行JSON.toJSONString(result1)后结果会跟result1的内容是一样的吗
ai给出的解释
所以 实际上只要 JSONObject.parseObject(result1) 就可以得到一个JSONObject对象
看下mda的值,多了转义字符
而原始的数据是一个json字符串,里面内容是没有转义的字符出现的,在代码中