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

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

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

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践

在电商行业蓬勃发展的当下&#xff0c;多平台运营已成为众多商家的必然选择。然而&#xff0c;不同电商平台在商品数据接口方面存在差异&#xff0c;导致商家在跨平台运营时面临诸多挑战&#xff0c;如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...

【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验

2024年初&#xff0c;人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目&#xff08;一款融合大型语言模型能力的云端AI编程IDE&#xff09;时&#xff0c;技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力&#xff0c;TRAE在WayToAGI等…...