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的感觉就是速度特别快,用起来也比较简单,注重实用性,当然了,上面只是一个简单的解析代码,并没有涉及到复杂的操作,由于时间关系,只是简单介绍下两者的使用方法,关于两者的使用,后续会结合项目中的场景持续更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity中Android各版本对应的SDK版本

在unity开发中经常出现兼容性的问题&#xff0c;老是忘记Android各版本对应的SDK版本&#xff0c;这里记录一下&#xff0c;以供自己查阅&#xff0c;如果unity打包生成android api过低&#xff0c;那么可能在最新的机型上无法运行&#xff0c;闪退或者各种异常。 平台版本SDK…

python实现批量替换目录下多个后缀为docx文档内容

#!/usr/bin/python # -*- coding: UTF-8 -*- import os from docx import Document from docx.shared import Inchesdef replace_in_word_docs(directory, old_text, new_text):# 遍历指定目录下的所有文件for filename in os.listdir(directory):if filename.endswith(.docx):…

Android将自定义的SurfaceView保存为bitmap

正常将View保存为Bitmap的方法&#xff1a; private Bitmap getViewToBitmap(View view) { // layoutView(view);//创建Bitmap,最后一个参数代表图片的质量.Bitmap bitmap Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);if (bitma…

【CentOS 7.9 分区】挂载硬盘为LVM操作实例

LVM与标准分区有何区别&#xff0c;如何选择 目录 1 小系统使用LVM的益处&#xff1a;2 大系统使用LVM的益处&#xff1a;3 优点&#xff1a;CentOS 7.9 挂载硬盘为LVM操作实例查看硬盘情况格式化硬盘创建PV创建VG创建LV创建文件系统并挂载自动挂载添加&#xff1a;注意用空格间…

pip 常用指令 pip list 命令用法介绍

&#x1f4d1;pip 常用命令归类整理 pip list 是一个用于列出已安装的 Python 包的命令。这个命令会显示出所有已安装的包&#xff0c;以及它们的版本号。 pip list 命令有以下参数 -o, --outdated&#xff1a;列出所有过时的包&#xff0c;即有新版本可用的包。-u, --uptod…

3D 纹理贴图基础知识

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 介绍 纹理贴图是创建模型时离不开的最后一块拼图。同样&#xff0c;…

综合评价---DEA数据包络分析

数据包络分析(Data Envelopment Analysis&#xff0c;DEA)&#xff0c;1978年由 Charnes、Cooper和Rhodes创建的一种绩效评价技术(performance technique) 。采用多投入、多产出数据对多个决策单元(Decision Making Unit) 的相对效率进行评价因DEA的诸多优势&#xff0c;被广泛…

JavaScript——数据类型判断方法汇总

1. typeof // 1.typeof 数组、对象和null都会被视为object 其他类型都判定正确 console.log(typeof {}); // object console.log(typeof []); // object console.log(typeof null); // object console.log(typeof function () {}); // function console.log(typeof 1); // num…

【.Net8教程】(一)读取配置文件全面总结

环境&#xff1a;.net8.0 1. 准备条件 先在appsettings.Development.json或appsettings.json添加配置 添加一个DbOption {"DbOption": {"Conn": "foolishsundaycsdn"} }2.直接读取json配置节点的几种写法 在Main函数中读取json配置 方式一 …

Linux环境下通过journal命令查看和管理日志

文章目录 前言问题分析journal 和 syslog 对比journal 和 syslog 配置使用journalctl查看和管理日志查看日志查看指定服务日志查看调整存储 回到文章开头的问题总结 前言 就在半月之前&#xff0c;负责打包更新的服务器突然登录不上去了&#xff0c;赶紧找来运维的同事帮忙解决…

【数据结构之顺序表】

数据结构学习笔记---002 数据结构之顺序表1、介绍线性表1.1、什么是线性表? 2、什么是顺序表?2.1、概念及结构2.2、顺序表的分类 3、顺序表接口的实现3.1、顺序表动态存储结构的Seqlist.h3.1.1、定义顺序表的动态存储结构3.1.2、声明顺序表各个接口的函数 3.2、顺序表动态存储…

b2b订货系统成本是多少

批发贸易企业都上b2b订货系统&#xff0c;b2b订货系统成本究竟是多少&#xff0c;今天我们来算一算&#xff0c;尤其是最后一个大家可能会忽略。 一是b2b订货系统模板的功能费用&#xff0c;这部分一般各大厂家是明码标价&#xff0c;比如易订货12800元/年&#xff0c;核货宝首…

深入理解 Rust 中的容器类型及其应用

Rust 作为一种系统编程语言&#xff0c;提供了丰富的容器类型来处理各种数据结构和算法。这些容器类型不仅支持基本的数据存储和访问&#xff0c;还提供了高效的内存管理和安全性保障。本文将详细介绍 Rust 中的几种主要容器类型&#xff0c;包括它们的用法、特点和适用场景&am…

【IDEA】try-catch自动生成中修改catch的内容

编辑器 --> 文件和代码模板 --> 代码 --> Catch Statement Body

【雷达原理】雷达测速原理及实现方法

一、雷达测速原理 1.1 多普勒频率 当目标和雷达之间存在相对运动时&#xff0c;若雷达发射信号的工作频率为&#xff0c;则接收信号的频率为&#xff0c;其中为多普勒频率。将这种由于目标相对于辐射源运动而导致回波信号的频率发生变化的现象称为多普勒效应。 如图1-1所示&a…

优先级队列与仿函数

优先级队列 优先级队列 priority_queue 是一种容器适配器&#xff0c;听起来是队列&#xff0c;其实它的底层数据结构是堆&#xff0c;所谓的优先级为默认越大的数优先级越高&#xff0c;即默认为大堆。 使用方式如下面的代码&#xff1a; #include<iostream> #includ…

攻防世界——game 游戏

下载下来是一个exe文件&#xff0c;可以用IDA打开 我们先运行一下 这是属于第二种类型&#xff0c;完成一个操作后给你flag 这种题我更倾向于动调直接得到flag 我们查壳 没有保护壳&#xff0c;直接32打开 进入字符串界面&#xff0c;找到显示的那部分 int __cdecl main_0(…

Java经典面试题——手写快速排序和归并排序

题目链接&#xff1a;https://www.luogu.com.cn/problem/P1177 输入模板&#xff1a; 5 4 2 4 5 1快速排序 技巧&#xff1a;交换数组中的两个位置 a[l] a[l] a[r] - (a[r] a[l]); 稳定不稳定&#xff1f;:不稳定 注意找哨兵那里内循环的等于号不能漏&#xff0c;不然…

MyBatis的ORM映射

目录 什么是ORM 一&#xff0c;列的别名 二&#xff0c;结果映射 三&#xff0c;总结 什么是ORM ORM&#xff1a;对象关系映射&#xff08;Object Relational Mapping&#xff0c;简称ORM&#xff09;模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简…

时间与时间戳转换及android和ios对时间识别的区别

注意&#xff1a; "2021-05-01 12:53:59.55" 时间对象在 ios 中会出现 NaN-NaN1-NaN 需要将对象格式化为&#xff1a;"2021/05/01 12:53:59.55" 可同时兼容 android 和 ios。 //将某时间转时间戳 /* var time new Date("2021-05-01 12:53:59.55&qu…