protobuf对象 转为Json串写入elastic search遇到的问题总结

2023-11-19

背景

kafka中消费数据后拿到的是protobuf序列化后的字节数组,转化为Java中的proto对象后,需要将这些protocol对象继续处理成Json串写入elasticsearch

各种问题

Json工具选择

刚开始尝试使用fastJson等工具来执行序列化,结果发现对于protobuf这种特殊对象,这些序列化工具都会报错,比如fastJson会提示UnsupportedOperationException: This field is not of enum type。最后在网上查找资料,发现Google专门提供了工具类来实现proto对象的Json化,com.google.protobuf.util.JsonFormat
可以参考这篇论文,https://segmentfault.com/a/1190000020270374

使用例子

JsonFormat.printer()
          .includingDefaultValueFields()
          .printingEnumsAsInts()
          .preservingProtoFieldNames()
          .print(element);

这几个选项设置能够控制序列化时的输出结果,是很有用的。

Json转Map工具

转为Json之后,需要将Json转为Map,从而写入ElasticSearch。这里最开始选择了Gson工具

map = new Gson().fromJson(mapJson,Map.class);  

然而存入ES之后,发现原来的整形数据被转成了float型,后面都加了小数点。于是,还是换成了FastJson工具,本来因为可能存在安全问题不想用的。

json = JSON.parseObject(mapJson, Map.class);

这次是可以用的,转换结果正确。

long型数据

本来以为都没问题了,结果发现proto中的long型数据在JsonFormat转为json之后,变成了String,这是这个工具类内部默认执行的类型映射,搞了半天,没有什么选项可以自定义映射,而且又不能继承和重写,索性把这个工具类复制了一份,自己把内部映射修改了一下。

后话

要学会举一反三,这个ES格式问题在开发中出了很多次,每次都是发布之后才发现,于是一次一次修改,本来出现一次就应该检查一下其他格式是否也有问题的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

protobuf对象 转为Json串写入elastic search遇到的问题总结 的相关文章

  • 幸有一事,生死可许

    已然到了岁末 2014就要结束 迎来崭新的2015 颇多感慨 颇多难忘 与其说是2014年是我职业生涯中至关重要的一年 倒不如说是我人生道路上极为重要的一步来的更为贴切 这一年忙忙碌碌 一刻不得清闲 却是极为充实 没有迷茫 没有挣扎 有的只
  • Unbuntu20.04(linux)离线安装seata

    一 解压 首先下载seata的安装包 cd usr local目录下执行以下命令 tar zxvf seata server 1 4 0 tar gz 二 修改配置文件 1 修改配置文件registry conf 修改自己的nacos信息
  • YOLOV7学习记录之训练过程

    在前面学习YOLOV7的过程中 我们已经学习了其网络结构 然而实际上YOLOV7项目的难点并不在于其网络模型而是在于其损失函数的设计 即如何才能训练出来合适的bbox 神经网络模型都有训练和测试 推理 过程 在YOLOV7的训练过程中 包含
  • kalilinux搭建DCN漏洞靶场

    kalilinux系统搭建DCN漏洞靶场 前言 安装kalilinux 搭建靶场 WinSCP连接kalilinux实现文件上传 导入镜像 前言 最近想学一下WEB安全 顺便学习一下靶场环境的搭建 之前搭建过webug玩了一下 但自己电脑运
  • 我与计算机视觉-[CUDA]-[CPU多线程下CUDA的多流]

    首先问题出在cpu下的多线程 当你想要在多个线程下调用同一个cuda核函数的时候 你会发现效率很低 那么经过验证 的确 不管你有多少个线程 cuda总是将线程中的核函数放入默认流中进行队列方式的处理 相当于单线程 但是这个问题在cuda7后
  • 基于 attention 机制的 LSTM 神经网络 超短期负荷预测方法学习记录

    LSTM long short term memory 长短期记忆 模型基础介绍 在标准LSTM体系结构中 有1个记忆单元状态和3个门 即更新门 u 遗忘门 f和输出门 o 标准LSTM的体系结构如图2所示 采用X1 X2 XT 表示LST
  • SeekBar设置最小值

    seekbar如何设置最小值 项目需求 要让seekbar的最小值为60 大家都知道如何设置初始值 最大值 但是最小值 我在网上查了一些资料 并不需要网上说的那么复杂 例如我的需求是seekbar的范围是60 85 最小值要为60 andr
  • Excel文件导出总结,包含大数据量的分批导出方式

    文章目录 更新记录 需求背景 参考内容 导出方式 代码实现 Excel4J 普通导出 POI原生方式 普通导出 大数据量分批导出 2023 08更新 实际应用记录 依赖版本 实现思路 POI工具类 数据写入 调用测试 测试结果 一个小意外
  • 成长这事儿,不可不说-------Day36

    其实我一直都有一个观点 从我当年刚学抛物线那会就有 人生其实就是一条轨迹 无非是一些点的集合 不过有些在低谷 有些在高峰 放形象了看 有些熠熠生辉 有些暗淡的几若消逝 有些人总喜欢回头数着过往的痕迹前行 仿佛这样才能感觉到踏实 仿佛这样才真
  • ubuntu20.04设置静态ip文件的地址

    旧版本在eth0 新版本在 etc netplan 01 network manager all yaml 可配置关闭hdcp实现静态ip设置及DNS和网关 具体设置内容网上教程很多
  • 网络协议和Netty

    文章标题 网络协议 计算机网络体系结构 OSI 七层模型 TCP IP 模型 TCP IP 协议族 TCP 和 UDP 地址和端口号 端口号的确定 端口号与协议 TCP IP TCP 三次握手 TCP 的三次握手的漏洞 TCP 四次挥手 分
  • Java list修改某个元素值的方法

    修改list中下标为index对象的值 set index element 增添 add index element
  • PyQt5学习记录----案例1实践

    案例1 创建多个用于信息提示的QLabel 要求 1 凡是提示的QLabel控件 都需设置 字体大小 25px 字体颜色 灰色 边框圆角 8px 2 信息提示分多个级别 正常 normal 绿色边框及字体 警告 warning 黄色边框及字
  • 国内达梦数据库相关函数-时间日期

    http blog itpub net 69995127 viewspace 2758308
  • 设计模式之美(王争)摘录总结

    经过八个月的学习 极客时间中王争的设计模式之美 最近又重读两遍 读书百遍其义自现 真是遍受益匪浅啊 学习之后才知道代码可以这样设计这样优美的编写 觉得自己有摘录一些在学习中认为比较好的精华 以备自己以后的查用和复习 设计模式要干的事情就是解
  • freemarker动态生成word和pdf

    1 使用freemarker生成word freemarker生成word的方法网上有很多 比较简单 基本上都差不多 所需工具 freemarker
  • 【学习笔记】经典目标检测算法

    定义 目标检测任务的目标是找到图像中的所有感兴趣区域 并确定这些区域的位置和类别 目标检测领域的深度学习方法主要分为两大类 两阶段式 Two stage 目标检测算法和单阶段式 One stage 目标检测算法 两步模型有独立地 显式地提取
  • Nginx路由--Location 的使用

    1 Location 语法规则 语法规则 location uri 首先匹配 其次匹配 其次是按文件中顺序的正则匹配 最后是交给 通用 匹配 当有匹配成功时候 停止匹配 按当前匹配规则处理请求 符号 含义 开头表示精确匹配 开头表示 uri
  • zeek流量分析工具安装与使用

    本文档记录流量分析工具 zeek 的安装过程以及如何使用它来分析 pcap 流量文件 环境说明 环境 ubuntu22 Anaconda conda 22 9 0 python 3 9 在具备以上环境后 开始在unbuntu系统下安装流量分
  • protobuf对象 转为Json串写入elastic search遇到的问题总结

    背景 从kafka中消费数据后拿到的是protobuf序列化后的字节数组 转化为Java中的proto对象后 需要将这些protocol对象继续处理成Json串写入elasticsearch 各种问题 Json工具选择 刚开始尝试使用fas

随机推荐

  • C++-std::unique_lock介绍和简单使用

    unique lock std unique lock比std lock guard更灵活 这种灵活性主要体现在以下几点 lock guard在构造时或者构造前 std adopt lock 就已经获取互斥锁 并且在作用域内保持获取锁的状态
  • Linux系统的安装(在VM虚拟机上安装CentOS 7)

    工具准备 物理计算机一台 配置要求 操作系统 win10 64位 大家基本上都是 硬盘可用容量 20G以上 内存容量 4G以上 虚拟机安装包 VMware workstation full 12 5 下载链接 点我下载 提取码 9gha C
  • 为什么程序员招聘都要5年经验起?因为他们懂Java8底层优化!

    一 前情回顾 上篇文章给大家聊了一下volatile的原理 具体参见 入坑两个月自研非外包创业公司 居然让我搞懂了volatile 这篇文章给大家聊一下java并发包下的CAS相关的原子操作 以及Java 8如何改进和优化CAS操作的性能
  • 在Qt中如何实现窗口交互

    首先介绍done函数 它的作用是 关闭当前窗口 同时返回一个状态信息 Qt助手解释 关闭对话框并将其结果代码设置为r 如果这个对话框显示了exec done 导致本地事件循环结束 exec 返回r void QDialog done int
  • checkbox样式改写

    div class checkbox font s div
  • js 微观任务、宏观任务、循环机制

    javascript是单线程语言 就是因为单线程的特性 就不得不提js中的同步和异步 同步和异步 所谓单线程 无非就是同步队列和异步队列 js代码是自上向下执行的 在主线程中立即执行的就是同步任务 比如简单的逻辑操作及函数 而异步任务不会立
  • 计算机网络--绪论

    一 计网的体系结构 1 概念和功能 2 组成和分类 3 标准化工作及相关组织 二 性能指标 1 速率 2 带宽 3 吞吐量 4 时延 5 时延带宽积 6 往返时间RTT利用率 7 利用率 三 分层结构 1 分层 四 OSI参考模型 1 OS
  • 随机数产生方法

    5 产生一定范围随机数的通用表示公式 要取得 a b 的随机整数 使用 rand b a a 要取得 a b 的随机整数 使用 rand b a 1 a 要取得 a b 的随机整数 使用 rand b a a 1 通用公式 a rand n
  • 【Vue】Vue基础自用笔记&Day02_①Vue过滤器②按键修饰符③自定义指令

    Vue基础 Day02 1 Vue过滤器 2 按键修饰符 3 自定义Vue指令 1 Vue过滤器 Vue js 允许你自定义过滤器 可被用于一些常见的文本格式化 过滤器可以用在两个地方 双花括号 插值和 v bind 表达式 后者从 2 1
  • 袁红岗的编程感悟

    我自己知道 近几年也一直在用 但就是说不出来 直到最近几天才能够表达 叫作Think in Code 也就是用代码思考 同时也把代码当成自己思想表达的方式 正如哲学家用文字设计 诠释思想 程序员 说话 用的是代码 这就是一个程序员的境 界
  • 使用python实现简单全连接神经网络

    最近在学习神经网络的相关知识 特在此做一个笔记 python语言的功能很强大 可以使用很少的代码实现很多功能 因此大家如果想研究深度学习的话 一定要懂得python语言 这篇笔记记录我的第一次使用python编写神经网络代码的过程 其中代码
  • Centos7 ELK7.6.2集群搭建

    Centos7 ELK7 6 2集群搭建 ELK7 6 2网盘安装包下载 一 单节点准备 配置ip 配置主机名和主机名映射 关闭防火墙 事件同步 更换yum源 阿里云yum源 安装常用软件 系统优化 创建用来启动es的普通用户 jdk安装
  • 微信小程序(日历/日期)选择插件

    微信小程序日历选择器插件点击日历日期可以获取到年月日 wxml
  • stm32学习笔记——通用计时器基本原理

    stm32f10x最多有8个定时器 stm32f103zet6就有8个定时器 分别是4个通用定时器 2个高级定时器 2个基本定时器 定时器种类 位数 计时器模式 产生DMA请求 捕获 比较通道 互补输出 特殊应用场景 高级定时器 TIM1
  • Spring Boot 应用启动时 java.lang.reflect.InaccessibleObjectException 问题的解决

    Spring Boot 的应用启动的时候遇到下面的错误 java lang reflect InaccessibleObjectException Unable to make private native accessible Set c
  • windows下命令行修改系统时间;修改系统时间的软件

    找了很久 都没有找到 还找了关键词 dos下修改系统时间 因为看到linux下修改系统时间是用hwclock 命令写入主板芯片 而我由于某些原因想自动化修改系统时间 所以找windows下修改系统时间的软件 没有找到 有一个 意天禁止修改系
  • 图解Git

    基本用法 上面的四条命令在工作目录 暂存目录 也叫做索引 和仓库之间复制文件 git add files 把当前文件放入暂存区域 git commit 给暂存区域生成快照并提交 git reset files 用来撤销最后一次git add
  • UNITY一些关于旋转的问题

    实现平滑的旋转 旋转的目的是为了朝向目标物体 untiy中的旋转rotation是一个四元数 在代码里面我们可以用Quaternion 来记录一个人物角色的最初的旋转角度 注意 这个要在awake里赋值 目的是取得该值 为了实现平滑的旋转
  • 关于powershell中错误:无法将“XXX”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案

    在利用ffmpeg进行格式转换时报错 无法将 ffmpeg 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 发现是改动了ffmpeg所在根文件夹名字 导致path环境变量找不到ffmpeg程序 改动环境变量就正常了 快速打开环境变
  • protobuf对象 转为Json串写入elastic search遇到的问题总结

    背景 从kafka中消费数据后拿到的是protobuf序列化后的字节数组 转化为Java中的proto对象后 需要将这些protocol对象继续处理成Json串写入elasticsearch 各种问题 Json工具选择 刚开始尝试使用fas