fastJSON 解决kafka消息斜杠转义问题

Bug: kafka发送消息时的JSON转义异常

问题描述:

问题描述:kafka消息发送出去但是消费者执行相关逻辑的时候报错.

场景:当时实习的时候需要模拟数据做一个实时经纬度传输的接口,使用kafka实时发送消息将数据同步到数据库中

问题分析:

fastjson使用不当可能导致转义异常**,kafka消息发送出去但是消费不了原因是 发送到kafka中的消息会带一堆斜杠的转义字符**导致消费者获取数据执行相关业务之后报错:类似于下面这种

"[{\"birthday\":\"2000\",\"major\":[\"挖掘机\",\"炒菜\"],\"name\":\"xiaoming\",\"comment\":\"hello world\",\"age\":25.2,\"status\":0}]";

问题解决:

JSONObject.toJSONString() 是阿里巴巴的 fastjson 库中的一个方法,用于将 JSONObject 对象转换为其对应的 JSON 格式的字符串表示。这个方法在需要将 JSON 对象以字符串形式存储、传输或打印到控制台等场景时非常有用。

https://blog.csdn.net/qq_27706119/article/details/104828285 参考

image-20240409104720259

实例代码

@Service
@Slf4j
public class KafKaSendServiceImpl implements KafKaSendService {// 封装的kafka客户端@Resourceprivate KafkaCommonService kafkaCommonService;@Overridepublic void deviceGatVideoModelDtoSend() {// 模拟数据DeviceGatVideoModelDto device = new DeviceGatVideoModelDto("c2", "d2", "设备2", "海康威视", "m2", "o2", "320123200003043342", "江宁区", "百家湖", 2,"c22", 2, 2, "102", 2, 200, "2025-8-2", "20002002", "192.168.1.128", 3862,"qq456", 2, "部分支持", 2, 120.46, 35.61, 3, "456456", false, "anotherString1");log.info("kafka发送消息:DEVICE_VIDEO_TOPIC");kafkaCommonService.kafkaSendMessage("DEVICE_VIDEO_TOPIC", JSONObject.toJSONString(device));log.info("kafka发送消息后:DEVICE_VIDEO_TOPIC");}@Overridepublic void notifyMobilePositionDtoSend() {NotifyMobilePositionDto dto = new NotifyMobilePositionDto("d1", "1", "c1", "1", "2024-01-01","120.45", "35.6", "20", "15", "100",2);log.info("kafka发送消息:NOTIFY_MOBILE_POSITION_TOPIC");kafkaCommonService.kafkaSendMessage("NOTIFY_MOBILE_POSITION_TOPIC",JSONObject.toJSONString(dto));}@Overridepublic void merge(){deviceGatVideoModelDtoSend();notifyMobilePositionDtoSend();}}

核心代码

kafkaCommonService.kafkaSendMessage("DEVICE_VIDEO_TOPIC", JSONObject.toJSONString(device2));

代码理解

JSONObject.toJSONString() 是阿里巴巴的 fastjson 库中的一个方法,用于将 JSONObject 对象转换为其对应的 JSON 格式的字符串表示。这个方法在需要将 JSON 对象以字符串形式存储、传输或打印到控制台等场景时非常有用。

这行代码调用了kafkaCommonServicekafkaSendMessage方法,用于发送Kafka消息。

  • "DEVICE_VIDEO_TOPIC":这是Kafka的主题名称,消息会被发送到这个主题。
  • JSONObject.toJSONString(device):这是消息的内容。JSONObject.toJSONString是fastjson库的一个方法,用于将Java对象转换为JSON格式的字符串。在这里,它将`device对象转换为其JSON字符串表示。

  • 功能描述

这个方法会遍历 JSONObject 对象中的所有键值对,并按照 JSON 的语法规则将它们转换成一个字符串。键和字符串类型的值通常会被双引号包围,而其他类型的值(如数字、布尔值等)则按照其对应的 JSON 表示形式输出。

  • 示例
import com.alibaba.fastjson.JSONObject;  public class FastjsonExample {  public static void main(String[] args) {  // 创建一个JSONObject对象  JSONObject jsonObject = new JSONObject();  jsonObject.put("name", "Alice");  jsonObject.put("age", 30);  jsonObject.put("isStudent", false);  // 将JSONObject转换为JSON格式的字符串  String jsonString = jsonObject.toJSONString();  // 打印转换后的JSON字符串  System.out.println(jsonString);  }  
}

总结:

所以,JSONObject.toJSONString(device)的作用是将device对象转换为一个JSON格式的字符串,这样它就可以作为Kafka消息的内容被发送。在Kafka中,消息通常是字符串或字节数组,因此,将对象转换为JSON字符串是一种常见的方式来发送结构化数据。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【iOS】——内存对齐

内存对齐是什么 内存对齐指的是数据在内存中的布局方式,它确保每个数据类型的起始地址能够满足该类型对齐的要求。这是因为现代处理器在访问内存时,如果数据的起始地址能够对齐到一定的边界,那么访问速度会更快。这种对齐通常是基于数据类型…

git使用、git与idea结合、gitee、gitlab

本文章基于黑马程序javase模块中的"git"部分 先言:git在集成idea中,不同版本的idea中页面显示不同,操作时更注重基于选项的文字;git基于命令操作参考文档实现即可,idea工具继承使用重点掌握 1.git概述 git是目前世界上最先进的分布式文件版本控制系统 分布式:将…

Linux-交换空间(Swap)管理

引入概念 在计算机中,硬盘的容量一般比内存大,内存(4GB 8GB 16GB 32GB 64GB…),硬盘(512GB 1T 2T…)。 冯诺依曼的现代计算机结构体系里面的存储器就是内存 内存是一种易失性存储器&#xff0c…

【论文解读】VoxelNeXt: Fully Sparse VoxelNet for 3D Object Detection and Tracking

VoxelNeXt 摘要引言方法Sparse CNN Backbone AdaptationSparse Prediction Head 3D Tracking实验结论 摘要 3D物体检测器通常依赖于手工制作的方法,例如锚点或中心,并将经过充分学习的2D框架转换为3D。因此,稀疏体素特征需要通过密集预测头进…

rabbitmq生产与消费

一、rabbitmq发送消息 一、简单模式 概述 一个生产者一个消费者模型 代码 //没有交换机,两个参数为routingKey和消息内容 rabbitTemplate.convertAndSend("test1_Queue","haha");二、工作队列模式 概述 一个生产者,多个消费者&a…

【Django】网上蛋糕商城后台-类目管理

1.类目管理列表实现 当管理员进入后台管理后,点击类目管理,向服务器发出请求 path(admin/type_list/,viewsAdmin.type_list), # 处理商品分类管理列表请求 def type_list(request):# 读取分页页码try:ym request.GET["ym"]except:ym 1# 查…

html2canvas + jspdf 纯前端HTML导出PDF的实现与问题

前言 这几天接到一个需求,富文本编辑器的内容不仅要展示出来,还要实现展示的内容导出pdf文件。一开始导出pdf的功能是由后端来做的,然后发现对于宽度太大的图片,导出的pdf文件里部分图片内容被遮盖了,但在前端是正常显…

Spring Boot1(概要 入门 Spring Boot 核心配置 YAML JSR303数据校验 )

目录 一、Spring Boot概要 1. SpringBoot优点 2. SpringBoot缺点 二、Spring Boot入门开发 1. 第一个SpringBoot项目 项目创建方式一:使用 IDEA 直接创建项目 项目创建方式二:使用Spring Initializr 的 Web页面创建项目 (了解&#…

【日常记录】【插件】excel.js导出的时候给单元格设置下拉选择、数据校验等

文章目录 1. 代码基本结构2. 导出的excel 某单元格的值设置为下拉选择3. 如何把下拉选择项设置为动态4. 单元格设置校验、提示5. 在WPS上的设置 1. 代码基本结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><…

如何在AWS上构建Apache DolphinScheduler

引言 随着云计算技术的发展&#xff0c;Amazon Web Services (AWS) 作为一个开放的平台&#xff0c;一直在帮助开发者更好的在云上构建和使用开源软件&#xff0c;同时也与开源社区紧密合作&#xff0c;推动开源项目的发展。 本文主要探讨2024年值得关注的一些开源软件及其在…

系统架构设计师教程 第3章 信息系统基础知识-3.5 专家系统-解读

系统架构设计师教程 第3章 信息系统基础知识-3.5 专家系统(ES) 3.5.1 人工智能3.5.1.1 人工智能的特点3.5.1.2 人工智能的主要分支3.5.2 ES的概念3.5.2.1 ES 概述3.5.2.2 与传统程序的区别3.5.3 ES的特点3.5.4 ES的组成3.5.4.1 知识库3.5.4.2 综合数据库3.5.4.3 推理机3.5.4.…

持续集成08--Jenkins邮箱发送构建信息及测试报告

前言 在持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;的自动化流程中&#xff0c;及时通知团队成员关于构建的成功或失败是至关重要的。Jenkins&#xff0c;作为强大的CI/CD工具&#xff0c;提供了多种通知机制&#xff0c;其中邮件通知是最常用且有…

如何用EXCEL自动解方程/方程组?利用 矩阵乘法X=A-*B,X=mmult(minverse(A), B)

目录 问题的由来 1 数据 → 模拟分析 → 单变量求解 1.1 找一个单元格填入公式 1.2 功能入口 1.3 选择单变量求解&#xff0c;分别填入内容 1.4 求解 1.5 这个感觉用处不大 2 重点介绍&#xff0c;用EXCEL进行矩阵运算解方程的操作 2.1 运用EXCEL进行矩阵运算&…

深入理解HTML基础【代码审计实战指南】

文章目录 JAVA技术体系的说明步骤 前端和后端技术栈网页的组成1. 结构 (HTML)2. 表现 (CSS)3. 行为 (JavaScript / JQuery) HTML的基本结构标签使用细节&#xff1a;font标签的使用字符实体含义&#xff1a;常用的特殊字符&#xff1a; 标题标签超链接标签列表标签无序列表ul/l…

谷粒商城-商品上架

1.sku在es中的存储模型分析(spring整和es) es中所有数据存在内存中,内存产品贵,能节省就节省,只保存有用的信息 两种保存方法:(空间换时间,时间换空间): 我们选空间换时间 ES中放这些东西: "mappings": { "properties": { "skuId"…

verilog bug记录——正点原子spi_drive存在的问题

verilog bug记录——正点原子spi_drive存在的问题 问题概述代码修改—spi_drive.v遗留问题 问题概述 因为项目需求&#xff0c;需要利用spi对flash进行擦除和写入操作&#xff0c;所使用的开发板是正电原子的达芬奇开发板&#xff0c;我事先往Flash里面存了两个bit&#xff0c…

数据挖掘与分析部分实验与实训项目报告

一、机器学习算法的应用 1. 朴素贝叶斯分类器 相关代码 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB, MultinomialNB from sklearn.metrics import accuracy_score # 将数据加载到DataFrame中&a…

【已解决】Django连接MySQL启动报错Did you install mysqlclient?

在终端执行python manage.py makemigrations报错问题汇总 错误1&#xff1a;已安装mysqlclient&#xff0c;提示Did you install mysqlclient? 当你看到这样的错误信息&#xff0c;表明Django尝试加载MySQLdb模块但未找到&#xff0c;因为MySQLdb已被mysqlclient替代。 【解…

【删除排序链表中的重复元素 II】python刷题记录

因为可能删除头结点&#xff0c;所以我们采用dummy哑结点&#xff08;跟上一篇类似&#xff09; dummy初始化 dummyListNode(0,head) # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # …

黑客自学手册(网络安全)

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防…