当前位置: 首页 > news >正文

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使用对比

前言 最近项目中需要做埋点分析&#xff0c;首先就需要对埋点日志进行解析处理&#xff0c;刚好这时候体验对比了下fastjson和jackson两者使用的区别&#xff0c;以下分别是针对同一个json串处理&#xff0c;最终的效果都是将json数据解析出来&#xff0c;并统一展示。 一、fa…...

设计模式之-模板方法模式,通俗易懂快速理解,以及模板方法模式的使用场景

系列文章目录 设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式&#xff0c;5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式&#xff0c;每一种模式的概念、使用…...

微软官方出品:GPT大模型编排工具,支持C#、Python等多个语言版本

随着ChatGPT的火热&#xff0c;基于大模型开发应用已经成为新的风口。虽然目前的大型模型已经具备相当高的智能水平&#xff0c;但它们仍然无法完全实现业务流程的自动化&#xff0c;从而达到用户的目标。 微软官方开源的Semantic Kernel的AI编排工具&#xff0c;就可以很好的…...

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 拧巴的时候表现如何优秀&#xff0c;但这一次说 vegas 时&#xff0c;我说的是从拥塞控制这个问题本身看来&#xff0c;vegas 为什么好&#xff0c;并且正确。 接着昨天 tcp vegas 鉴赏 继续扯。 假设一群共享带宽的流量中有流量退出或有…...

【设计模式】命令模式

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、什么是命令模式&#xff1f; 二、命令模式的优点和应用场景 三、命令模式的要素和实现 3.1 命令 3.2 具体命令 3.3 接受者 …...

Unity头发飘动效果

Unity头发飘动 介绍动作做头发飘动头发骨骼绑定模拟物理组件 UnityChan插件下载UnityChan具体用法确定人物是否绑定好骨骼节点&#xff08;要做的部位比如头发等&#xff09;给人物添加SpringManager骨骼管理器给骨骼节点添加SpringBone这里给每个头发骨骼都添加上SpringBone。…...

【MIKE】MIKE河网编辑器操作说明

目录 MIKE河网编辑器说明河网定义河网编辑工具栏河网文件(.nwk11)输入步骤1. 从传统的地图引入底图1.1 底图准备1.2 引入河网底图1.3 输入各河段信息2. 从ARCView .shp文件引入底图MIKE河网编辑器说明 河网编辑器主要功能有两个: ①河网的编辑和参数输人,包括数字化河网及…...

RIPV1配置实验

查看路由器路由表&#xff1a; 删除手工配置的静态路由项&#xff1a; Route1->Config->static Remove删除路由项 删除Route3的路由项&#xff0c;方法同上删除Route2的路由项&#xff0c;方法同上 完成路由器RIP配置&#xff1a; Route1->Config->RIP->Ne…...

快速实现农业机械设备远程监控

农业机械设备远程监控解决方案 一、项目背景 近年来&#xff0c;农业生产事故时有发生&#xff0c;农业安全问题已经成为农业生产中的关键问题&#xff0c;农业监控系统在农业安全生产中发挥着重要作用。农业机械设备以计划维修或定期保养为主&#xff0c;在日常应用的过程中因…...

解决用Fiddler抓包,网页显示你的连接不是专用/私密连接

关键&#xff1a;重置fiddler的证书 在Fiddler重置证书 1、Actions --> Reset All Certificates --> 弹窗一路yes 2、关掉Fiddler&#xff0c;重新打开 3、手机删掉证书&#xff0c;重新下载安装。 &#xff08;如果还不行&#xff0c;重新试一遍&#xff0c;先把浏览器…...

单片机原理及应用:流水灯的点亮

流水灯是一种简单的单片机控制电路&#xff0c;由许多LED组成&#xff0c;电路工作时LED会按顺序点亮&#xff0c;类似于流水的效果。 下面是运行在keil上的代码&#xff0c;分别使用了数组&#xff0c;移位符和库函数来表示。 //数组法 #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 选择排序: 从左往右找到最小的元素&#xff0c;放在起始位置…...

使用@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中池化的作用 池化层的作用是对感受野内的特征进行选择&#xff0c;提取区域内最具代表性的特征&#xff0c;能够有效地减少输出特征数量&#xff0c;进而减少模型参数量。按操作类型通常分为最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling)&a…...

微服务常见的配置中心简介

微服务架构中&#xff0c;常见的配置中心包括以下几种&#xff1a; Spring Cloud Config&#xff1a; Spring Cloud Config是官方推荐的配置中心解决方案&#xff0c;它支持将配置文件存储在Git、SVN等版本控制系统中。通过提供RESTful API&#xff0c;各个微服务可以远程获取和…...

银河麒麟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相冲突&#xff0c;因此首先需要卸载系统自带的mariadb 查看系统上默认安装的M…...

一篇文章带你搞定CTFMice基本操作

CTF比赛是在最短时间内拿到最多的flag&#xff0c;mice必须要有人做&#xff0c;或者一支战队必须留出一块时间专门写一些mice&#xff0c;web&#xff0c;pwn最后的一两道基本都会有难度&#xff0c;这时候就看mice的解题速度了&#xff01; 说实话&#xff0c;这是很大一块&…...

Spring security之授权

前言 本篇为大家带来Spring security的授权&#xff0c;首先要理解一些概念&#xff0c;有关于&#xff1a;权限、角色、安全上下文、访问控制表达式、方法级安全性、访问决策管理器 一.授权的基本介绍 Spring Security 中的授权分为两种类型&#xff1a; 基于角色的授权&…...

模式识别与机器学习(十一):Bagging

1.原理 Bagging [Breiman, 1996a] 是井行式集成学习方法最著名的代表.从名字即可看出&#xff0c;它直接基于自助采样法(bootstrap sampling)。给定包含m 个样本的数据集&#xff0c;我们先随机取出一个样本放入采样集中&#xff0c;再把该样本放回初始数据集&#xff0c;使得…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...

React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?

系列回顾&#xff1a; 在上一篇《React核心概念&#xff1a;State是什么&#xff1f;》中&#xff0c;我们学习了如何使用useState让一个组件拥有自己的内部数据&#xff08;State&#xff09;&#xff0c;并通过一个计数器案例&#xff0c;实现了组件的自我更新。这很棒&#…...