当前位置: 首页 > 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;使得…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

Vue 实例的数据对象详解

Vue 实例的数据对象详解 在 Vue 中,数据对象是响应式系统的核心,也是组件状态的载体。理解数据对象的原理和使用方式是成为 Vue 专家的关键一步。我将从多个维度深入剖析 Vue 实例的数据对象。 一、数据对象的定义方式 1. Options API 中的定义 在 Options API 中,使用 …...

NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地

NineData 的数据库 DevOps 解决方案已完成对百度智能云向量数据库 VectorDB 的全链路适配&#xff0c;成为国内首批提供 VectorDB 原生操作能力的服务商。此次合作聚焦 AI 开发核心场景&#xff0c;通过标准化 SQL 工作台与细粒度权限管控两大能力&#xff0c;助力企业安全高效…...

【Axure高保真原型】图片列表添加和删除图片

今天和大家分享图片列表添加和删除图片的原型模板&#xff0c;效果包括&#xff1a; 点击图片列表的加号可以显示图片选择器&#xff0c;选择里面的图片&#xff1b; 选择图片后点击添加按钮&#xff0c;可以将该图片添加到图片列表&#xff1b; 鼠标移入图片列表的图片&…...