自学内容网 自学内容网

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


原文地址:https://blog.csdn.net/chijiansong/article/details/136350765

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!