json解析之fastjson和jackson使用对比
前言
最近项目中需要做埋点分析,首先就需要对埋点日志进行解析处理,刚好这时候体验对比了下fastjson和jackson两者使用的区别,以下分别是针对同一个json串处理,最终的效果都是将json数据解析出来,并统一展示。
一、fastjson简介?
fastjson是由国内的阿里推出的一种json处理器,由java语言编写,无依赖,不需要引用额外的jar包,能直接运行在jdk环境中,它的解析速度是非常之快的,目前超过了所有json库。
提示:以下是引用fastjson的方法,数据未涉及到私密信息
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException;public class FastJsonTest {public static void main(String[] args) throws JsonProcessingException {String json = "{\n" +" \"distinct_id\": \"77\",\n" +" \"identities\":\n" +" {\n" +" \"$identity_mp_id\": \"37\",\n" +" \"$identity_login_id\": \"77\",\n" +" \"$identity_mp_wx17a032a586c19379_openid\": \"oiF\",\n" +" \"$identity_anonymous_id\": \"oiF\"\n" +" },\n" +" \"lib\":\n" +" {\n" +" \"$lib\": \"MiniProgram\",\n" +" \"$lib_method\": \"code\",\n" +" \"$lib_version\": \"1.17.7\"\n" +" },\n" +" \"properties\":\n" +" {\n" +" \"$lib\": \"MiniProgram\",\n" +" \"$lib_version\": \"1.17.7\",\n" +" \"$network_type\": \"WIFI\",\n" +" \"$brand\": \"IPHONE\",\n" +" \"$manufacturer\": \"iPhone\",\n" +" \"$model\": \"iPhone 12 Pro Max<iPhone13,4>\",\n" +" \"$screen_width\": 428,\n" +" \"$screen_height\": 926,\n" +" \"$os\": \"iOS\",\n" +" \"$os_version\": \"14.2.1\",\n" +" \"$mp_client_app_version\": \"8.0.44\",\n" +" \"$mp_client_basic_library_version\": \"3.2.5\",\n" +" \"$timezone_offset\": -480,\n" +" \"$app_id\": \"wx17a039\",\n" +" \"$app_version\": \"1.3\",\n" +" \"platform_type\": \"小程序\",\n" +" \"product_name\": \"小程序\",\n" +" \"member_flag\": false,\n" +" \"member_level\": \"非会员\",\n" +" \"$latest_scene\": \"wx-10\",\n" +" \"$scene\": \"wx-10\",\n" +" \"$url_path\": \"pages/Common/Url/index\",\n" +" \"$title\": \"照明\",\n" +" \"$url_query\": \"\",\n" +" \"$referrer\": \"pages/Common/Url/index\",\n" +" \"$referrer_title\": \"照明\",\n" +" \"$url\": \"pages/Common/Url/index\",\n" +" \"$is_first_day\": false,\n" +" \"$ip\": \"11.11.11.11\",\n" +" \"$browser\": \"WeChat\",\n" +" \"$browser_version\": \"8\",\n" +" \"$track_signup_original_id\": \"oiF\",\n" +" \"$is_login_id\": true,\n" +" \"$ad_extra_properties\": \"{\\\"sdf_channel_closed\\\":false}\",\n" +" \"$city\": \"上海\",\n" +" \"$province\": \"上海\",\n" +" \"$country\": \"中国\"\n" +" },\n" +" \"login_id\": \"77\",\n" +" \"anonymous_id\": \"oiF\",\n" +" \"type\": \"track\",\n" +" \"event\": \"$MPShow\",\n" +" \"_track_id\": 5692,\n" +" \"time\": 1703,\n" +" \"_flush_time\": 17032,\n" +" \"device_id\": \"oiFOU\",\n" +" \"project_id\": 2,\n" +" \"map_id\": \"oiFOU\",\n" +" \"user_id\": -4011,\n" +" \"recv_time\": 1703,\n" +" \"extractor\":\n" +" {\n" +" \"f\": \"sdf_input_topic\",\n" +" \"o\": 379,\n" +" \"n\": \"sdf_input_topic\",\n" +" \"s\": 379,\n" +" \"c\": 379,\n" +" \"p\": 1,\n" +" \"e\": \"hyb\"\n" +" },\n" +" \"edge_progress\":\n" +" {\n" +" \"f\": \"(dev=821,ino=537178209)\",\n" +" \"n\": \"access_log.2023122213\",\n" +" \"o\": 1400687,\n" +" \"s\": 37229603,\n" +" \"c\": 37229604,\n" +" \"e\": \"hybr\"\n" +" },\n" +" \"project\": \"test\",\n" +" \"ver\": 2\n" +"}";JSONObject jsonObject = JSON.parseObject(json);new FastJsonTest().travelJSONObject(jsonObject);}public void travelJSONObject(JSONObject originalJSONObject) {for (String key : originalJSONObject.keySet()) { StringBuilder path = new StringBuilder(key);Object value = originalJSONObject.get(key);if (value instanceof String || value instanceof Number || value instanceof Boolean) {System.out.println(key + " : " + value);continue;}if (value instanceof JSONObject) {JSONObject object = (JSONObject) value;travelJSONObject(object);}}}
}
二、jackson简介
jackson是用来序列化和反序列化json的java开源框架,社区相对比较活跃,更新速度较快,是最流行的json解析器之一,也是Spring MVC默认json解析器。
提示:以下是引用jackson的方法,数据未涉及到私密信息
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException;
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode;
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Iterator;public class JacksonTest {public static void main(String[] args) throws JsonProcessingException {String json = "{\n" +" \"distinct_id\": \"77\",\n" +" \"identities\":\n" +" {\n" +" \"$identity_mp_id\": \"37\",\n" +" \"$identity_login_id\": \"77\",\n" +" \"$identity_mp_wx17a032a586c19379_openid\": \"oiF\",\n" +" \"$identity_anonymous_id\": \"oiF\"\n" +" },\n" +" \"lib\":\n" +" {\n" +" \"$lib\": \"MiniProgram\",\n" +" \"$lib_method\": \"code\",\n" +" \"$lib_version\": \"1.17.7\"\n" +" },\n" +" \"properties\":\n" +" {\n" +" \"$lib\": \"MiniProgram\",\n" +" \"$lib_version\": \"1.17.7\",\n" +" \"$network_type\": \"WIFI\",\n" +" \"$brand\": \"IPHONE\",\n" +" \"$manufacturer\": \"iPhone\",\n" +" \"$model\": \"iPhone 12 Pro Max<iPhone13,4>\",\n" +" \"$screen_width\": 428,\n" +" \"$screen_height\": 926,\n" +" \"$os\": \"iOS\",\n" +" \"$os_version\": \"14.2.1\",\n" +" \"$mp_client_app_version\": \"8.0.44\",\n" +" \"$mp_client_basic_library_version\": \"3.2.5\",\n" +" \"$timezone_offset\": -480,\n" +" \"$app_id\": \"wx17a039\",\n" +" \"$app_version\": \"1.3\",\n" +" \"platform_type\": \"小程序\",\n" +" \"product_name\": \"小程序\",\n" +" \"member_flag\": false,\n" +" \"member_level\": \"非会员\",\n" +" \"$latest_scene\": \"wx-10\",\n" +" \"$scene\": \"wx-10\",\n" +" \"$url_path\": \"pages/Common/Url/index\",\n" +" \"$title\": \"照明\",\n" +" \"$url_query\": \"\",\n" +" \"$referrer\": \"pages/Common/Url/index\",\n" +" \"$referrer_title\": \"照明\",\n" +" \"$url\": \"pages/Common/Url/index\",\n" +" \"$is_first_day\": false,\n" +" \"$ip\": \"11.11.11.11\",\n" +" \"$browser\": \"WeChat\",\n" +" \"$browser_version\": \"8\",\n" +" \"$track_signup_original_id\": \"oiF\",\n" +" \"$is_login_id\": true,\n" +" \"$ad_extra_properties\": \"{\\\"sdf_channel_closed\\\":false}\",\n" +" \"$city\": \"上海\",\n" +" \"$province\": \"上海\",\n" +" \"$country\": \"中国\"\n" +" },\n" +" \"login_id\": \"77\",\n" +" \"anonymous_id\": \"oiF\",\n" +" \"type\": \"track\",\n" +" \"event\": \"$MPShow\",\n" +" \"_track_id\": 5692,\n" +" \"time\": 1703,\n" +" \"_flush_time\": 17032,\n" +" \"device_id\": \"oiFOU\",\n" +" \"project_id\": 2,\n" +" \"map_id\": \"oiFOU\",\n" +" \"user_id\": -4011,\n" +" \"recv_time\": 1703,\n" +" \"extractor\":\n" +" {\n" +" \"f\": \"sdf_input_topic\",\n" +" \"o\": 379,\n" +" \"n\": \"sdf_input_topic\",\n" +" \"s\": 379,\n" +" \"c\": 379,\n" +" \"p\": 1,\n" +" \"e\": \"hyb\"\n" +" },\n" +" \"edge_progress\":\n" +" {\n" +" \"f\": \"(dev=821,ino=537178209)\",\n" +" \"n\": \"access_log.2023122213\",\n" +" \"o\": 1400687,\n" +" \"s\": 37229603,\n" +" \"c\": 37229604,\n" +" \"e\": \"hybr\"\n" +" },\n" +" \"project\": \"test\",\n" +" \"ver\": 2\n" +"}";ObjectMapper mapper = new ObjectMapper();JsonNode jsonNode = mapper.readTree(json);Iterator<String> keys = jsonNode.fieldNames();while (keys.hasNext()){String key = keys.next();JsonNode value = jsonNode.get(key);if(value instanceof JsonNode){Iterator<String> subkeys = value.fieldNames();while (subkeys.hasNext()){String subkey = subkeys.next();JsonNode subvalue = value.get(subkey);System.out.println(subkey + " : " + subvalue);}}else{System.out.println(key + ":"+ "\t" + jsonNode.get(key)) ;}}}
}
总结
分别对两个json解析器进行试用,个人感觉jackson代码比较优雅,类似java jdbc连接数据的使用规范,估计这也是国外特别喜欢用它的原因吧,而fastjson的感觉就是速度特别快,用起来也比较简单,注重实用性,当然了,上面只是一个简单的解析代码,并没有涉及到复杂的操作,由于时间关系,只是简单介绍下两者的使用方法,关于两者的使用,后续会结合项目中的场景持续更新。
相关文章:
json解析之fastjson和jackson使用对比
前言 最近项目中需要做埋点分析,首先就需要对埋点日志进行解析处理,刚好这时候体验对比了下fastjson和jackson两者使用的区别,以下分别是针对同一个json串处理,最终的效果都是将json数据解析出来,并统一展示。 一、fa…...
设计模式之-模板方法模式,通俗易懂快速理解,以及模板方法模式的使用场景
系列文章目录 设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式,每一种模式的概念、使用…...
微软官方出品:GPT大模型编排工具,支持C#、Python等多个语言版本
随着ChatGPT的火热,基于大模型开发应用已经成为新的风口。虽然目前的大型模型已经具备相当高的智能水平,但它们仍然无法完全实现业务流程的自动化,从而达到用户的目标。 微软官方开源的Semantic Kernel的AI编排工具,就可以很好的…...
docker安装的php 在cli中使用
1: 修改 ~/.bashrc 中新增 php7 () {ttytty -s && tty--ttydocker run \$tty \--interactive \--rm \--volume /website:/website:rw \--workdir /website/project \--networkdnmp_dnmp \dnmp_php php "$" }–networkdnmp_dnmp 重要, 不然连不上数据库, 可通…...
tcp vegas 为什么好
我吹捧 bbr 时曾论证过它在和 buffer 拧巴的时候表现如何优秀,但这一次说 vegas 时,我说的是从拥塞控制这个问题本身看来,vegas 为什么好,并且正确。 接着昨天 tcp vegas 鉴赏 继续扯。 假设一群共享带宽的流量中有流量退出或有…...
【设计模式】命令模式
其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、什么是命令模式? 二、命令模式的优点和应用场景 三、命令模式的要素和实现 3.1 命令 3.2 具体命令 3.3 接受者 …...
Unity头发飘动效果
Unity头发飘动 介绍动作做头发飘动头发骨骼绑定模拟物理组件 UnityChan插件下载UnityChan具体用法确定人物是否绑定好骨骼节点(要做的部位比如头发等)给人物添加SpringManager骨骼管理器给骨骼节点添加SpringBone这里给每个头发骨骼都添加上SpringBone。…...
【MIKE】MIKE河网编辑器操作说明
目录 MIKE河网编辑器说明河网定义河网编辑工具栏河网文件(.nwk11)输入步骤1. 从传统的地图引入底图1.1 底图准备1.2 引入河网底图1.3 输入各河段信息2. 从ARCView .shp文件引入底图MIKE河网编辑器说明 河网编辑器主要功能有两个: ①河网的编辑和参数输人,包括数字化河网及…...
RIPV1配置实验
查看路由器路由表: 删除手工配置的静态路由项: Route1->Config->static Remove删除路由项 删除Route3的路由项,方法同上删除Route2的路由项,方法同上 完成路由器RIP配置: Route1->Config->RIP->Ne…...
快速实现农业机械设备远程监控
农业机械设备远程监控解决方案 一、项目背景 近年来,农业生产事故时有发生,农业安全问题已经成为农业生产中的关键问题,农业监控系统在农业安全生产中发挥着重要作用。农业机械设备以计划维修或定期保养为主,在日常应用的过程中因…...
解决用Fiddler抓包,网页显示你的连接不是专用/私密连接
关键:重置fiddler的证书 在Fiddler重置证书 1、Actions --> Reset All Certificates --> 弹窗一路yes 2、关掉Fiddler,重新打开 3、手机删掉证书,重新下载安装。 (如果还不行,重新试一遍,先把浏览器…...
单片机原理及应用:流水灯的点亮
流水灯是一种简单的单片机控制电路,由许多LED组成,电路工作时LED会按顺序点亮,类似于流水的效果。 下面是运行在keil上的代码,分别使用了数组,移位符和库函数来表示。 //数组法 #include <reg52.h> //头文…...
蓝桥杯宝藏排序算法(冒泡、选择、插入)
冒泡排序: def bubble_sort(li): # 函数方式for i in range(len(li)-1):exchangeFalsefor j in range(len(li)-i-1):if li[j]>li[j1]:li[j],li[j1]li[j1],li[j]exchangeTrueif not exchange:return 选择排序: 从左往右找到最小的元素,放在起始位置…...
使用@jiaminghi/data-view实现一个数据大屏
<template><div class"content bg"><!-- 全局容器 --><!-- <dv-full-screen-container> --><!-- 第二行 --><div class"module-box" style"align-items: start; margin-top: 10px"><!-- 左 -->…...
神经网络:池化层知识点
1.CNN中池化的作用 池化层的作用是对感受野内的特征进行选择,提取区域内最具代表性的特征,能够有效地减少输出特征数量,进而减少模型参数量。按操作类型通常分为最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling)&a…...
微服务常见的配置中心简介
微服务架构中,常见的配置中心包括以下几种: Spring Cloud Config: Spring Cloud Config是官方推荐的配置中心解决方案,它支持将配置文件存储在Git、SVN等版本控制系统中。通过提供RESTful API,各个微服务可以远程获取和…...
银河麒麟v10 rpm安装包 安装mysql 8.35
银河麒麟v10 rpm安装包 安装mysql 8.35 1、卸载mariadb2、下载Mysql安装包3、安装Mysql 8.353.1、安装Mysql 8.353.3、安装后配置 1、卸载mariadb 由于银河麒麟v10系统默认安装了mariadb 会与Mysql相冲突,因此首先需要卸载系统自带的mariadb 查看系统上默认安装的M…...
一篇文章带你搞定CTFMice基本操作
CTF比赛是在最短时间内拿到最多的flag,mice必须要有人做,或者一支战队必须留出一块时间专门写一些mice,web,pwn最后的一两道基本都会有难度,这时候就看mice的解题速度了! 说实话,这是很大一块&…...
Spring security之授权
前言 本篇为大家带来Spring security的授权,首先要理解一些概念,有关于:权限、角色、安全上下文、访问控制表达式、方法级安全性、访问决策管理器 一.授权的基本介绍 Spring Security 中的授权分为两种类型: 基于角色的授权&…...
模式识别与机器学习(十一):Bagging
1.原理 Bagging [Breiman, 1996a] 是井行式集成学习方法最著名的代表.从名字即可看出,它直接基于自助采样法(bootstrap sampling)。给定包含m 个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得…...
ElevenLabs克隆成功率从31%飙升至96.7%:基于LPC共振峰校准+Prosody Transfer双引擎微调法(实测数据包已脱敏上传)
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs语音克隆方法概览 ElevenLabs 提供了高保真、低延迟的语音克隆能力,其核心依赖于少量高质量语音样本(通常 1–3 分钟)与上下文感知的零样本/少样本微调技术…...
Linux磁盘挂载与开机自启配置
Linux磁盘挂载与开机自启配置磁盘挂载是 Linux 存储管理中的基础操作。很多线上问题都与挂载配置有关,例如重启后数据盘没挂上、路径指向错误分区、应用因挂载点缺失而启动失败。中级阶段不仅要会临时挂载,更要理解永久挂载的配置方式和风险控制。一、先…...
为什么92%的设计师调不出正宗铂金印相?3个被忽略的色彩科学陷阱与CIE LAB空间修正公式
更多请点击: https://intelliparadigm.com 第一章:铂金印相的视觉本质与历史语境 铂金印相(Platinum Print)并非一种数字图像处理技术,而是一种19世纪末诞生于摄影化学工艺巅峰的物理显影体系。其视觉本质在于——铂金…...
U64JSON编码技术解析与Iris框架性能优化
1. Iris框架与U64JSON编码技术解析 在嵌入式系统和高性能计算领域,数据交换效率直接影响整体系统性能。传统JSON虽然具有可读性好、跨平台等优势,但其文本特性带来的解析开销和带宽占用成为性能瓶颈。Arm Iris框架采用的U64JSON编码方案,通过…...
用STM32F103C8T6和HC-05蓝牙模块,从零DIY一辆蓝牙遥控小车(附完整代码与MIT App Inventor教程)
从零打造STM32蓝牙遥控小车:硬件配置到APP开发全指南 项目背景与核心价值 对于嵌入式开发初学者来说,理论知识和实际项目之间往往存在一道难以跨越的鸿沟。而一个完整的硬件项目实践,恰恰是填补这一空白的最佳方式。基于STM32F103C8T6和HC-05…...
【独家首发】ElevenLabs马拉雅拉姆文支持状态实测报告(含ISO 639-2代码验证、音素对齐误差率<0.8%)
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs马拉雅拉姆文支持的现状与战略意义 ElevenLabs 作为全球领先的语音合成平台,自2023年11月起正式将马拉雅拉姆语(Malayalam,ISO 639-1: ml)纳入…...
Midjourney玩具相机风格从翻车到封神:1个--v 6.1专属参数组合+2个隐藏式胶片颗粒注入指令+1套曝光补偿校准表
更多请点击: https://intelliparadigm.com 第一章:Midjourney玩具相机风格的视觉本质与审美悖论 失真即真实:玩具相机的光学哲学 玩具相机(Toy Camera)风格在 Midjourney 中并非简单模拟 Lomography 或 Holga 的物理…...
SMAPI模组加载器:星露谷物语模组玩家的终极完整指南
SMAPI模组加载器:星露谷物语模组玩家的终极完整指南 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 你是否厌倦了手动安装星露谷物语模组时的繁琐步骤?是否担心模组冲突导致游…...
Zabbix监控大屏展示中文总乱码?手把手教你替换DejaVuSans为微软雅黑字体
Zabbix监控大屏中文乱码终极解决方案:从字体替换到视觉优化 当你精心配置的Zabbix监控大屏在向管理层汇报时突然出现中文乱码,那种尴尬就像交响乐团演出时小提琴突然走音。作为经历过数十次企业级监控系统部署的资深运维,我深知字体问题远不止…...
Dism++实战指南:一站式Windows系统维护的5大专业解决方案
Dism实战指南:一站式Windows系统维护的5大专业解决方案 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language Dism作为Windows系统维护的专业工具…...
