搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
人工智能uu
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
深度学习和人工智能之间是什么样的关系?_人工智能学习和深度学习的关系
2
关于鸿蒙开发中装饰器@Extend、@Styles、@Builder的介绍_鸿蒙开发 如何理解鸿蒙的修饰器
3
【人工智能】—美国加利福尼亚州房价预测实战案例_加州房价预测
4
PADS PCB绘图软件使用过程中遇到的问题和填坑_pads怎么消除酸角错误
5
ROS篇——Ubuntu快速一键安装ROS或ROS2(通用)_ros一键安装
6
fatal: Not a git repository (or any of the parent directories): .git
7
Linux环境下搭建hadoop环境
8
Python之cv2
9
关于程序员团队管理?_管理程序员团队
10
银行对公业务如何开展数字化运营?解决方案看这里
当前位置:
article
> 正文
4种json解析技术对比_对比json
作者:人工智能uu | 2024-08-22 04:43:59
赞
踩
对比json
JSON技术的调研报告
一 、各个JSON技术的简介和优劣
1.json-lib
json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,
包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,
对于复杂类型的转换,json-lib对于json转换成bean还有缺陷,比如一个类里面会出现另一个类的list或者map集合,json-lib从json到bean的转换就会出现问题。
json-lib在功能和性能上面都不能满足现在互联网化的需求。
2.开源的Jackson
相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。
而且Jackson社区相对比较活跃,更新速度也比较快。
Jackson对于复杂类型的json转换bean会出现问题,一些集合Map,List的转换出现问题。
Jackson对于复杂类型的bean转换Json,转换的json格式不是标准的Json格式
3.Google的Gson
Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,
但自从在2008年五月公开发布第一版后已被许多公司或用户应用。
Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。
而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。
类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。
Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。
4.阿里巴巴的FastJson
Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。
无依赖,不需要例外额外的jar,能够直接跑在JDK上。
FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。
FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。
综上4种Json技术的比较,在项目选型的时候可以使用Google的Gson和阿里巴巴的FastJson两种并行使用,
如果只是功能要求,没有性能要求,可以使用google的Gson,
如果有性能上面的要求可以使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean
二、Google的Gson包的使用简介。
Gson类:解析json的最基础的工具类
JsonParser类:解析器来解析JSON到JsonElements的解析树
JsonElement类:一个类代表的JSON元素
JsonObject类:JSON对象类型
JsonArray类:JsonObject数组
TypeToken类:用于创建type,比如泛型List<?>
(1)maven依赖
com.google.code.gson
gson
2.2.4
(2)基础转换类
public class Book{
private String id;
private String name;
public Book() {
super();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Student{
private String name;
private int age;
private String sex;
private String describe;
private Set books;
public Student() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Set getBooks() {
return books;
}
public void setBooks(Set books) {
this.books = books;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
}
(3)bean转换json
Gson gson = new Gson();
String json = gson.toJson(obj);
obj是对象
(4)json转换bean
Gson gson = new Gson();
String json = "{\"id\":\"2\",\"name\":\"Json技术\"}";
Book book = gson.fromJson(json, Book.class);
(5)json转换复杂的bean,比如List,Set
将json转换成复杂类型的bean,需要使用TypeToken
Gson gson = new Gson();
String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";
//将json转换成List
List list = gson.fromJson(json,new TypeToken<LIST>() {}.getType());
//将json转换成Set
Set set = gson.fromJson(json,new TypeToken<SET>() {}.getType());
(6)通过json对象直接操作json以及一些json的工具
a)格式化Json
String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(json);
json = gson.toJson(je);
b)判断字符串是否是json,通过捕捉的异常来判断是否是json
String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";
boolean jsonFlag;
try {
new JsonParser().parse(str).getAsJsonObject();
jsonFlag = true;
} catch (Exception e) {
jsonFlag = false;
}
c)从json串中获取属性
String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
String propertyName = 'id';
String propertyValue = "";
try {
JsonParser jsonParser = new JsonParser();
JsonElement element = jsonParser.parse(json);
JsonObject jsonObj = element.getAsJsonObject();
propertyValue = jsonObj.get(propertyName).toString();
} catch (Exception e) {
propertyValue = null;
}
d)除去json中的某个属性
String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
String propertyName = 'id';
JsonParser jsonParser = new JsonParser();
JsonElement element = jsonParser.parse(json);
JsonObject jsonObj = element.getAsJsonObject();
jsonObj.remove(propertyName);
json = jsonObj.toString();
e)向json中添加属性
String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
String propertyName = 'desc';
Object propertyValue = "json各种技术的调研";
JsonParser jsonParser = new JsonParser();
JsonElement element = jsonParser.parse(json);
JsonObject jsonObj = element.getAsJsonObject();
jsonObj.addProperty(propertyName, new Gson().toJson(propertyValue));
json = jsonObj.toString();
f)修改json中的属性
String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
String propertyName = 'name';
Object propertyValue = "json各种技术的调研";
JsonParser jsonParser = new JsonParser();
JsonElement element = jsonParser.parse(json);
JsonObject jsonObj = element.getAsJsonObject();
jsonObj.remove(propertyName);
jsonObj.addProperty(propertyName, new Gson().toJson(propertyValue));
json = jsonObj.toString();
g)判断json中是否有属性
String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
String propertyName = 'name';
boolean isContains = false ;
JsonParser jsonParser = new JsonParser();
JsonElement element = jsonParser.parse(json);
JsonObject jsonObj = element.getAsJsonObject();
isContains = jsonObj.has(propertyName);
h)json中日期格式的处理
GsonBuilder builder = new GsonBuilder();
builder.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Gson gson = builder.create();
然后使用gson对象进行json的处理,如果出现日期Date类的对象,就会按照设置的格式进行处理
i)json中对于Html的转义
Gson gson = new Gson();
这种对象默认对Html进行转义,如果不想转义使用下面的方法
GsonBuilder builder = new GsonBuilder();
builder.disableHtmlEscaping();
Gson gson = builder.create();
三、阿里巴巴的FastJson包的使用简介。
(1)maven依赖
com.alibaba
fastjson
1.1.22
(2)基础转换类
同上
(3)bean转换json
将对象转换成格式化的json
JSON.toJSONString(obj,true);
将对象转换成非格式化的json
JSON.toJSONString(obj,false);
obj设计对象
对于复杂类型的转换,对于重复的引用在转成json串后在json串中出现引用的字符,比如 $ref":"$[0].books[1]
Student stu = new Student();
Set books= new HashSet();
Book book = new Book();
books.add(book);
stu.setBooks(books);
List list = new ArrayList();
for(int i=0;i<5;i++)
list.add(stu);
String json = JSON.toJSONString(list,true);
(4)json转换bean
String json = "{\"id\":\"2\",\"name\":\"Json技术\"}";
Book book = JSON.parseObject(json, Book.class);
(5)json转换复杂的bean,比如List,Map
String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";
//将json转换成List
List list = JSON.parseObject(json,new TypeReference<ARRAYLIST>(){});
//将json转换成Set
Set set = JSON.parseObject(json,new TypeReference<HASHSET>(){});
(6)通过json对象直接操作json
a)从json串中获取属性
String propertyName = 'id';
String propertyValue = "";
String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
JSONObject obj = JSON.parseObject(json);
propertyValue = obj.get(propertyName));
b)除去json中的某个属性
String propertyName = 'id';
String propertyValue = "";
String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
JSONObject obj = JSON.parseObject(json);
Set set = obj.keySet();
propertyValue = set.remove(propertyName);
json = obj.toString();
c)向json中添加属性
String propertyName = 'desc';
Object propertyValue = "json的玩意儿";
String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
JSONObject obj = JSON.parseObject(json);
obj.put(propertyName, JSON.toJSONString(propertyValue));
json = obj.toString();
d)修改json中的属性
String propertyName = 'name';
Object propertyValue = "json的玩意儿";
String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
JSONObject obj = JSON.parseObject(json);
Set set = obj.keySet();
if(set.contains(propertyName))
obj.put(propertyName, JSON.toJSONString(propertyValue));
json = obj.toString();
e)判断json中是否有属性
String propertyName = 'name';
boolean isContain = false;
String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
JSONObject obj = JSON.parseObject(json);
Set set = obj.keySet();
isContain = set.contains(propertyName);
f)json中日期格式的处理
Object obj = new Date();
String json = JSON.toJSONStringWithDateFormat(obj, "yyyy-MM-dd HH:mm:ss.SSS");
使用JSON.toJSONStringWithDateFormat,该方法可以使用设置的日期格式对日期进行转换
三、json-lib包的使用简介。
(1)maven依赖
net.sf.json-lib
json-lib
jdk15
2.2.2
commons-beanutils
commons-beanutils
1.8.3
commons-collections
commons-collections
3.2
commons-lang
commons-lang
2.6
commons-logging
commons-logging
1.1.1
net.sf.ezmorph
ezmorph
1.0.6
(2)基础转换类
同上
(3)bean转换json
a)将类转换成Json,obj是普通的对象,不是List,Map的对象
String json = JSONObject.fromObject(obj).toString();
b)将List,Map转换成Json
String json = JSONArray.fromObject(list).toString();
String json = JSONArray.fromObject(map).toString();
(4)json转换bean
String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
JSONObject jsonObj = JSONObject.fromObject(json);
Book book = (Book)JSONObject.toBean(jsonObj,Book.class);
(5)json转换List,对于复杂类型的转换会出现问题
String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"Java技术\"}]";
JSONArray jsonArray = JSONArray.fromObject(json);
JSONObject jsonObject;
T bean;
int size = jsonArray.size();
List list = new ArrayList(size);
for (int i = 0; i < size; i++) {
jsonObject = jsonArray.getJSONObject(i);
bean = (T) JSONObject.toBean(jsonObject, beanClass);
list.add(bean);
}
(6)json转换Map
String jsonString = "{\"id\":\"1\",\"name\":\"Json技术\"}";
JSONObject jsonObject = JSONObject.fromObject(jsonString);
Iterator keyIter = jsonObject.keys();
String key;
Object value;
Map valueMap = new HashMap();
while (keyIter.hasNext()) {
key = (String) keyIter.next();
value = jsonObject.get(key).toString();
valueMap.put(key, value);
}
(7)json对于日期的操作比较复杂,需要使用JsonConfig,比Gson和FastJson要麻烦多了
创建转换的接口实现类,转换成指定格式的日期
class DateJsonValueProcessor implements JsonValueProcessor{
public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS";
private DateFormat dateFormat;
public DateJsonValueProcessor(String datePattern) {
try {
dateFormat = new SimpleDateFormat(datePattern);
} catch (Exception ex) {
dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
}
}
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return process(value);
}
public Object processObjectValue(String key, Object value,
JsonConfig jsonConfig) {
return process(value);
}
private Object process(Object value) {
return dateFormat.format
[
1
];
Map<STRING,DATE> birthDays = new HashMap<STRING,DATE>();
birthDays.put("WolfKing",new Date());
JSONObject jsonObject = JSONObject.fromObject(birthDays, jsonConfig);
String json = jsonObject.toString();
System.out.println(json);
}
}
(8)JsonObject 对于json的操作和处理
a)从json串中获取属性
String jsonString = "{\"id\":\"1\",\"name\":\"Json技术\"}";
Object key = "name";
Object value = null;
JSONObject jsonObject = JSONObject.fromObject(jsonString);
value = jsonObject.get(key);
jsonString = jsonObject.toString();
b)除去json中的某个属性
String jsonString = "{\"id\":\"1\",\"name\":\"Json技术\"}";
Object key = "name";
Object value = null;
JSONObject jsonObject = JSONObject.fromObject(jsonString);
value = jsonObject.remove(key);
jsonString = jsonObject.toString();
c)向json中添加和修改属性,有则修改,无则添加
String jsonString = "{\"id\":\"1\",\"name\":\"Json技术\"}";
Object key = "desc";
Object value = "json的好东西";
JSONObject jsonObject = JSONObject.fromObject(jsonString);
jsonObject.put(key,value);
jsonString = jsonObject.toString();
d)判断json中是否有属性
String jsonString = "{\"id\":\"1\",\"name\":\"Json技术\"}";
boolean containFlag = false;
Object key = "desc";
JSONObject jsonObject = JSONObject.fromObject(jsonString);
containFlag = jsonObject.containsKey(key);
文章出自:http://www.cnblogs.com/kunpengit/p/4001680.html
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/人工智能uu/article/detail/1014734
推荐阅读
article
Vue实现
JSON
编辑器
_
vue
json
编辑器
...
本文档介绍了如何使用Vue创建一个
JSON
编辑器
,包括默认和全屏两种状态的效果展示,具备按键功能、细节提示、格式正确性检...
赞
踩
article
【前端】
Vue
项目
中
JSON
编辑器
的使用_
vue
json
编辑器
...
现有一个
vue
项目
,需要一个
json
编辑器
,能够格式化
json
数据,同时也支持编辑功能。以下是列举了几种,可以根据风格或...
赞
踩
article
json
编辑器
插件
vue
_
vue
-
json
-
editor
json
编辑器
...
本文介绍了在Vue项目中使用
vue
-
json
-
editor
和bin-code-
editor
两个
json
编辑器
插件的实践。...
赞
踩
article
json
-
editor
-
vue3
Vue3
json
编辑器使用...
首先安装
json
-
editor
-
vue3
。在需要引入的index.vue文件中。在main.ts中加入,不加会报错。_j...
赞
踩
article
TypeScript
编译
文件
和
tsc
onfig.
json
配置_
tsc
:
build
-
tsc
onf...
自动
编译
文件
编译
文件
时,使用 -w 指令后,TS
编译
器会自动监视
文件
的变化,并在
文件
发生变化时对
文件
进行重新
编译
。示例:...
赞
踩
article
JSON
Path
解析
JSON
完整内容详解_
jsonpath
解析
...
前言最近在玩JMeter,总所周知,大家都知道我们在请求接口之后,都需要加断言去验证我们所请求的接口是否成功还是失败,于...
赞
踩
article
JWT
(
JSON
Web
Token
)漏洞_
jwt
漏洞...
本文深入探讨
JWT
(
JSON
Web
Token
)的工作原理,包括其结构、生成流程和Base64URL编码。介绍了如何删...
赞
踩
article
理解
HTTP
POST
请求
:表单与
JSON
数据格式深入解析20231208_post
请求
表单...
HTTP
POST
请求
是一种常用的网络
请求
类型,用于向服务器发送数据。它们通常用于表单提交或向 API 传输数据。了解...
赞
踩
article
关于
post
请求
的三种
参数
【
params
,
data
,
json
】_
post
请求
的
params
...
基础不牢,地动山摇~处理海外某网站发帖接口时候,接口
参数
都逆完了,最后用aiohttp 发送
post
请求
,发现结果怎么都...
赞
踩
article
前端
数据格式
解析
json
,
form
(
application
/
json
、
application
/x-...
这几天编写web前端时,在处理前端数据发回后端时遇到了一些
数据格式
的问题,查了不少资料后准备整理总结一下。常见的有两种格...
赞
踩
article
【
Postman
】6
Postman
发送
post
请求-
Json
格式_
post
json
请求(1)_...
二、
Json
基础JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。在初始的项...
赞
踩
article
tsconfig
.
json
详解
与常用
配置
(笔记)...
tsconfig
.
json
常用
配置
项,自己写的笔记,仅供参考_
tsconfig
.
json
详解
tsconfig
.
json
...
赞
踩
article
常见
序列化
的优劣:
pb
、
avro
、
json
、
hessian
_
pb
序列化
...
介绍常见
序列化
的方式:
pb
、
avro
、
json
、
hessian
,列举每种
序列化
方式的优劣,以及对比。_
pb
序列化
pb
序列...
赞
踩
article
对比
JSON
和
Hessian2
的
序列化
格式_
hessian
协议
和
json
协议
序列化
性能对比...
特性
JSON
Hessian2
可读性高,可读性强,便于调试低,二进制格式,不便于调试语言无关性高,几乎所有语言都支持中等,...
赞
踩
article
序列化
方案
选型对比 -
JSON
/
ProtocolBuffer
/FlatBuffer/
DIMBIN
...
4千字长文预警!! 背景
JSON
/XML不好吗? 好,再没有一种
序列化
方案
能像
JSON
和XML一样流行,自由、方便,拥...
赞
踩
article
JSON
.to
JSON
String什么作用...
这对于将 Java 对象表示的数据转换为可在网络传输或存储中传递的格式是非常有用的。反之,
JSON
.parseObjec...
赞
踩
article
JSON
.to
JSON
String()和
Gson
.
toJson
()
方法
比较...
两个
方法
都是将Java对象转化为
JSON
字符串格式,不同点是
JSON
.to
JSON
String()是阿里的com.ali...
赞
踩
article
JSON
.to
JSON
String()
返回
{}原因...
JSON
.to
JSON
String()
返回
{}原因_json.tojsonstringjson.tojsonstring...
赞
踩
article
com.alibaba.fast
json
.
JSON
.to
JSON
String使用时值为
NULL
的属性...
当使用Alibaba的Fast
json
进行
json
序列化时,若属性值为
NULL
,默认会被忽略。通过设置Serialize...
赞
踩
article
JSON
.to
JSON
String_
java
json
.to
json
string...
json
_
java
json
.to
json
string
java
json
.to
json
string ...
赞
踩
相关标签
json
css
前端
vue.js
json编辑器插件 vue
javascript
typescript
jwt
javaweb
http
网络协议
python
经验分享
网络爬虫
postman
lua
java
性能优化