小工具知识网

当前位置: 首页 > 行业知识 > 使用hutool的beanToMap方法问题,记录一个json转换问题

行业知识

使用hutool的beanToMap方法问题,记录一个json转换问题

2026-11-02 14:11:31 来源:互联网转载

问题���这样的

项目中使用了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字符串,里面内容是没有转义的字符出现的,在代码中

上一篇:环境分析检测小剂量移液用耐受硝酸盐酸PFA材质吸管特氟龙移液枪枪头

下一篇:基于SpringBoot+vue的高校学生成绩管理系统