Gson,FastJson,JackJson,ProtoBuf 数据格式转换详解

2023-11-13

1、Gson

依赖

implementation 'com.google.code.gson:gson:2.8.6'
Gson gson = new Gson();

实体类(Bean)转JSON

String json = gson.toJson(new Bean());

JSON转实体类(Bean)

Bean b = gson.fromJson('json',Bean.class);

Map转Json

gson.toJson(map)

Json转Map

Map<String, Object> map = gson.fromJson("json",new TypeToken<Map<String, Object>>() {}.getType());

List 转JSON

LList<Bean> list = new ArrayList<>();
list.add(new Bean());
gson.toJson(list)

JSON转List

List<Bean> list = gson.fromJson('json',new TypeToken<List<Bean>>(){}.getType());

2、FastJson

依赖

implementation 'com.alibaba:fastjson:1.2.70'

实体类(Bean)转JSON

JSON.toJSONString(new Bean())

JSON转实体类(Bean)

Bean b = JSON.parseObject('json',Bean.class);

Map转Json

JSON.toJSONString('map')

Json转Map

JSONObject  jsonObject = JSONObject.parseObject(JSON.toJSONString(new Bean()));
Map<String,Object> map = (Map<String,Object>)jsonObject;
Object object = map.get("array");

List 转JSON

 List<Bean> list = new ArrayList<>();
 list.add(new Bean());
 JSON.toJSONString(list)

JSON转List

JSON.parseArray('json',Bean.class);

3、JackJson

依赖

implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.0'

需要 throws JsonProcessingException

private static ObjectMapper MAPPER = new ObjectMapper();

实体类(Bean)转JSON

MAPPER.writeValueAsString(new Bean())

JSON转实体类(Bean)

MAPPER.readValue('json', Bean.class)

Map转Json

MAPPER.writeValueAsString('map')

Json转Map

Map map = MAPPER.readValue('json',Map.class);

List 转JSON

List<Bean> list = new ArrayList<>();
list.add(new Bean()); 
String ljson = MAPPER.writeValueAsString(list);

JSON转List

MAPPER.readValue('json', ArrayList.class)

4、ProtoBuf

配置依赖 具体配置查看 demo

implementation 'com.googlecode.protobuf-java-format:protobuf-java-format:1.2'

ProtoBuf转Json

BeanBuf beanBuf = BeanBuf.newBuilder().setName("测试").build();
String jsonFormat = JsonFormat.printToString(beanBuf);

Json转ProtoBuf

BeanBuf bean = BeanBuf.newBuilder().build();
JsonFormat.merge('json', bean.toBuilder());

Proto序列化

BeanBuf bean = BeanBuf.newBuilder().setAge(11111111).build();
byte[] byteArray1 = bean.toByteArray();
Arrays.toString(byteArray1)

Proto反序列化

BeanBuf bean = BeanBuf.newBuilder().setAge(11111111).build();
try {
    BeanBuf buf = BeanBuf.parseFrom(bean.toByteArray());
    mBinding.textView.setText(buf.toString());
} catch (IOException e) {
	e.printStackTrace();
}

本文源码 FormatConversionExample

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

Gson,FastJson,JackJson,ProtoBuf 数据格式转换详解 的相关文章

随机推荐

  • CUDA 计算线程索引的一般公式

    第一种方法 CUDA thread index int blockId blockIdx z gridDim x gridDim y blockIdx y gridDim x blockIdx x int threadId blockId
  • Couldn‘t resolve host

    Centos6安装完并配置静态ip地址后 发现yum命令下载出现Couldn t resolve host ping www baidu com 出现域名解析错误 百度大部分答案是在 etc sysconfig network script
  • 用java求出1-1/2+1/3-1/4…..1/100的和

    public class sumPractice3 public static void main String args 需求 求出1 1 2 1 3 1 4 1 100的和 分子始终为1 double num 1 定义个变量用来存储计算
  • 三个基于WebRTC开源MCU框架的横向对比

    1 licode 官网地址 http lynckia com licode index html 官方demo地址 https chotis2 dit upm es Github地址 https github com lynckia lic
  • switch的用法

    switch语句 实际生活中 需要做出很多选择 大家都知道做选择可以使用if语句 但是如果选择太多 if语句使用起来就会很繁琐 这个时候就需要一个能将代码简化的语句 也就是我们今天的主角switch语句 switch语句是一个多分支选择语句
  • 【中等】【LeetCode刷题笔记(二十九)】之54.螺旋矩阵

    本文章由公号 开发小鸽 发布 欢迎关注 老规矩 妹妹镇楼 一 题目 一 题干 给定一个包含 m x n 个元素的矩阵 m 行 n 列 请按照顺时针螺旋顺序 返回矩阵中的所有元素 二 示例 示例 1 输入 1 2 3 4 5 6 7 8 9
  • 零基础如何使用IDEA启动前后端分离中的前端项目(Vue)?

    一 在IDEA中配置vue插件 点击File gt Settings gt Plugins gt 搜索vue js插件进行安装 下面的图中我已经安装好了 二 搭建node js环境 安装node js 可以去官网下载 安装过程就很简单 直接
  • 活动预告丨SMP十周年系列论坛第一期:社交机器人论坛开幕

    全国社会媒体处理大会十周年系列论坛 第一期 SMP2021社交机器人论坛 将于2021年11月13日 周六 上午线上举办 旨在探讨社交机器人领域的热点和前沿 探索构建更智能的社交机器人的学术研究和技术方案 人机对话系统是人工智能领域最具挑战
  • LocalDate、LocalDateTime互转String

    目录 1 LocalDate String互转 LocalDate转String String转LocalDate 2 LocalDateTime String互转 LocalDateTime转String String转LocalDate
  • c语言连点器脚本

    include
  • 数据分析学习之路——(五)用数据告诉你电影的市场趋势

    随着社会的多元化 越来越多的影视作品走入人们的生活中 但是近年来鲜有几部新制作的电影能俘获观众的心 到底是观众越来越挑剔 还是电影作品本身不够吸引力 如果你是有一个电影公司 你想制作一部电影作品 你有想过拍一部什么样的电影吗 你会选择一名什
  • 高级Bash脚本编程指南(24):时间/日期 命令

    高级Bash脚本编程指南 24 时间 日期 命令 成于坚持 败于止步 时间 日期和计时 date 直接调用date命令就会把日期和时间输出到 stdout上 这个命令有趣的地方在于它的格式化和分析选项上 root ubuntu resour
  • PAT乙级1016 部分A+B (15 分)

    1016 部分A B 15 分 一 问题描述 二 代码实现 include
  • solidity通用模式访问限制

    通用模式 访问限制 访问限制是智能合约的一种通用模式 但你不能限制任何人获取你的智能合约和交易的状态 当然 你可以通过加密来增加读取难度 但是如果你的智能合约需要读取该数据 指加密的数据 其他人也可以读取 你可以通过将合约状态设置为私有来限
  • Delphi程序使用资源的释放

    写出一个不会造成资源分配崩溃的Delphi应用程序的 关键是确保如果程序中分配了资源 即使当故障发生 程 序也应能释放占用的资源 文件 内存 WINDOWS资源和对象是一些必须时时加 以注意的需确保释放的资源 下面的事件控制代码例子中 先分
  • 详细SysTick定时器(+对寄存器段位的解释)

    1 首先 systick定时器 嘀嗒定时器 隶属于CM4内核的一个外设 内嵌在NVIC中 所以一些函数在core cm4 c中 系统定时器是一个24bit向下递减的计数器 计数器每次计数时间为1 SYSCLK SYSCLK gt 系统时钟
  • 文库系统PPT docx pdf文档转换系统在线预览知识付费程序源码 二次开发

    基于PHP MYSQL开发的适用于多平台的文档管理系统 支持doc ppt excel pdf 压缩包 图片 音视频 等资源的在线预览和下载 响应速度更快速对SEO更友好 收录更快 排名更强 内置文章 问题 广告管理 TAG标签 内部链接等
  • Grafana

    grafana 是一款采用 go 语言编写的开源应用 主要用于大规模指标数据的可视化展现 是网络架构和应用分析中最流行的时序数据展示工具 目前已经支持绝大部分常用的时序数据库 最好的参考资料就是官网 http docs grafana or
  • typora数学符号大全

    转载于 https www cnblogs com mmmqqdd p 10803576 html
  • Gson,FastJson,JackJson,ProtoBuf 数据格式转换详解

    1 Gson 依赖 implementation com google code gson gson 2 8 6 Gson gson new Gson 实体类 Bean 转JSON String json gson toJson new B