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

news/发布时间2024/9/20 8:13:48

问题是这样的

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/atJe/9187.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

面试数据库篇(mysql)- 09undo log和redo log的区别

原理 缓冲池(buffer pool):主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),以一定频率刷新到磁盘,从而减少磁盘IO,加快处理速度数据页(page):是InnoDB 存储引擎磁盘管…

AD9851——FPGA调试(并行模式)

AD9851——FPGA调试(并行模式) 工程功能:使用FPGA来调试AD9851芯片,使用的是并行模式 芯片手册:AD9851 CMOS 180 MHz DDS/DAC Synthesizer Data Sheet (Rev. D) (analog.com) 管脚功能 管脚名称管脚功能D0-D78位数据输…

【Redis | 第四篇】基于布隆过滤器解决Redis穿透问题

文章目录 4.基于布隆过滤器解决Redis穿透问题4.1什么是redis的穿透问题4.2解决穿透问题4.3布隆过滤器4.3.1思想4.3.2特点4.3.3缺点 4.4基于Springboot实现布隆过滤器4.4.1导入依赖4.4.2yml配置4.4.3两个工具类(1)BloomFilterHelper(2&#xf…

GPT访问跨域如何解决呢?

在服务器部署了gpt 参考这个 但是访问不到 后面我在docker启动了nginx代理 user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connections 1024; }http {include /etc/nginx/mime.typ…

大话设计模式——4.装饰模式(Decorator Pattern)

1.定义 1)可以在不改动原有对象代码的情况下扩展对象的功能,通过聚合的方式相较于继承更加灵活。 2)UML图 2.示例 汽车有很多装饰可选,如座椅、音响、轮胎等都可以进行自定义组装 1)抽象汽车对象 public interfac…

代码里没有报错,但是java编译报错找不到符号

问题分析: 最近在尝试maven编译,所以不小心点了mvn clean的命令,将之前编译的工程清除了,导致后边再编译项目上的时候就报了一堆错误。代码没问题,但编译不通过,报找不到符号的错误,搜了下这样解…

PHPStudy无法解析php(7.3.4)文件

#告诉服务器,对于以.fcgi、.php或.phtml为后缀的请求,应该使用FPM进行处理。 AddHandler fcgid-script .fcgi .php .phtml #设置了全局默认使用的PHP版本路径 FcgidInitialEnv PHPRC "D:/phpstudy_pro/Extensions/php/php7.3.4nts" #告诉服务器…

QT信号槽实现分析

1.宏定义 qt中引入了MOC来反射,编译阶段变成 MOC–>预处理–>编译–>汇编–>链接 1-1、Q_OBJECT 这个宏定义了一系列代码,包括元对象和处理的函数 #define Q_OBJECT \public: \QT_WARNING_PUSH \Q_OBJECT_NO_OVERRIDE_WARNING \static c…

sylar高性能服务器-日志(P43-P48)内容记录

文章目录 P43:Hook01一、HOOK定义接口函数指针获取接口原始地址 二、测试 P44-P48:Hook02-06一、hook实现基础二、class FdCtx成员变量构造函数initsetTimeoutgetTimeout 三、class FdManager成员变量构造函数get(获取/创建文件句柄类&#x…

数据结构试题练习

(1). 假如队列未满,现有变量data需要入队,请写出表达式; if( (tail1)%SEQLEN ! head ) {seqn[tail] data;tail (tail1)%SEQLEN; } (2). 假如队列未空,现在需要从队列取一个元素并赋值给变量data,请写出表达式; if( head ! tail ) {data se…

广和通发布基于MediaTek T300平台的RedCap模组FM330系列及解决方案

世界移动通信大会MWC 2024期间,广和通发布基于MediaTek T300平台的RedCap模组FM330系列,加速5G-A繁荣发展。FM330系列及其解决方案采用全球先进RedCap方案,满足移动宽带和工业互联对高能效的需求。 广和通FM330系列采用全球首款6nm制程且集成…

Mac安装java编程工具——idea

一、Java 开发工具 本文是推荐安装的是JetBrains 的 IDEA 下载地址:Download IntelliJ IDEA – The Leading Java and Kotlin IDE 选择对应系统的和对应芯片 mac os分为:intel(英特尔)和 Apple Silicon(苹果的M系列…

数字中国:构建智慧社会的未来蓝图

一、引言 随着信息技术的迅猛发展,数字中国已经成为推动社会进步、提升国家竞争力的重要引擎。数字中国不仅代表着信息技术的广泛应用,更代表着一种全新的社会形态和发展模式。在这个背景下,AI与大数据技术的融合与应用成为数字中国建设的核…

3dgs学习(二)—— 3d高斯与协方差矩阵及其几何意义

协方差矩阵与3d高斯 3d高斯与椭球与协方差矩阵 3d高斯,及3维空间内的正态分布。 通过一元正态分布的坐标系图像不难想象,3维空间中的正态分布点集中在一片椭球空间中,各方向长轴取决于各方向正态分布的方差。 而协方差矩阵通过计算多元之…

Redis String 类型底层揭秘

目录 前言 String 类型低层数据结构 节省内存的数据结构 前言 Redis 的 string 是个 “万金油” ,这么评价它不为过. 它可以保存Long 类型整数,字符串, 甚至二进制也可以保存。对于key,value 这样的单值,查询以及插…

亿道推出重磅加固平板!为行业发展注入新动力

随着科技生产力的不断发展,各行各业都得到质的飞跃。产品的迭代速度也大大加快,作为全球领先的加固行移动终端一站式提供商,亿道信息跟紧时代潮流,推出EM-I10J、EM-I20J两款均衡型加固平板,为行业发展注入新动力。 接地…

HarmonyOS创建一个ArkTS卡片

创建一个ArkTS卡片 在已有的应用工程中,创建ArkTS卡片,具体操作方式如下。 创建卡片。 根据实际业务场景,选择一个卡片模板。 在选择卡片的开发语言类型(Language)时,选择ArkTS选项,然后单…

小红书关键词爬虫

标题 1 统计要收集的关键词,制作一个文件夹2 爬取每一页的内容3 爬取标题和内容4 如果内容可以被查看,爬取评论内容5 将结果进行汇总,并且每个帖子保存为一个json文件,具体内容6 总结 1 统计要收集的关键词,制作一个文…

Spring Boot 手写starter!!!

原因:为什么要手写starter??? 原因:简化功能。 实例:以分页为例:写一个starter。 1.首先定义一个PageX注解。 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented p…

神经网络系列---权重初始化方法

文章目录 权重初始化方法Xavier初始化(Xavier initialization)Kaiming初始化,也称为He初始化LeCun 初始化正态分布与均匀分布Orthogonal InitializationSparse Initializationn_in和n_out代码实现 权重初始化方法 Xavier初始化(X…
推荐文章