JSON总结-持续更新补充
基本的json格式
{
"name": "jobs",
"boolean": true,
"age": null,
"num": 88
}
json对象
{
"starcraft": {
"INC": "Blizzard",
"price": 60
}
}
json数组
{
"person": [
"jobs",
60
]
}
json对象数组
{
"array": [
{
"name": "jobs"
},
{
"name": "bill",
"age": 60
},
{
"product": "war3",
"type": "game",
"popular": true,
"price": 60
}
]
}
常见的JSON解析工具
json-lib的net.sf.json的json处理包
优点:老牌,应用广泛
缺点:jar包依赖多、转换成bean存在不足(bean里面存在list集合,map等)、性能不足
依赖jar包:
- commons-beanutils-1.8.0.jar
- commons-collections-3.2.1.jar
- commons-lang-2.5.jar
- commons-logging-1.1.1.jar
- ezmorph-1.0.6.jar
- json-lib-2.4-jdk15.jar
阿里巴巴官方出的fastjson处理包
优点:高性能,不需要额外的jar,可以直接跑在jdk上面,速度极致
缺点:bean转换为json时可能会存在错误(类型上面)
谷歌官方出品的Gson
优点:无依赖,直接跑在jdk上,只要存在getter、setter方法就可以解析,神器!
缺点:必须在对象转换之前创建好对象的类型以及其成员,性能稍差
json-lib对json数据的处理
package com.glorze.json;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonlibUtil {
public static void main(String[] args) {
Set<Book> bookSet = new HashSet<Book>();
Book book=new Book();
book.setId("0808");
book.setName("基督山伯爵");
bookSet.add(book);
Student student = new Student();
student.setName("高老四");
student.setAge(25);
student.setDescribe("男神、帅哥");
student.setSex("男");
student.setBooks(bookSet);
//Bean转换成json字符串
String json = JSONObject.fromObject(student).toString();
System.out.println("Bean转换成Json:"+json);
//json转Bean
String jsonStr = "{\"id\":\"2\",\"name\":\"Json技术\"}";
JSONObject jsonObject = JSONObject.fromObject(jsonStr);
Book book2 = (Book) JSONObject.toBean(jsonObject,Book.class);
System.out.println("json字符串转Bean:"+book2.toString());
//json转换成List(Set同理)
String jsonStr2 = "[{\"id\":\"1\",\"name\":\"Java技术\"},{\"id\":\"2\",\"name\":\"Json技术\"}]";
JSONArray jsonArray = JSONArray.fromObject(jsonStr2);
JSONObject jsonObject2 = null;
Book book3 = null;
int size = jsonArray.size();
List list = new ArrayList(size);
for (int i = 0; i < size; i++) {
jsonObject2 = jsonArray.getJSONObject(i);
book3 = (Book) JSONObject.toBean(jsonObject, Book.class);
list.add(book3);
}
System.out.println("json字符串转List:"+JSONArray.fromObject(list).toString());
}
}
fastjson对json数据的处理
package com.glorze.json;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
public class FastjsonUtil {
public static void main(String[] args) {
Set<Book> bookSet = new HashSet<Book>();
Book book=new Book();
book.setId("0808");
book.setName("基督山伯爵");
bookSet.add(book);
Student student = new Student();
student.setName("高老四");
student.setAge(25);
student.setDescribe("男神、帅哥");
student.setSex("男");
student.setBooks(bookSet);
//Bean转换成json字符串
String json=JSON.toJSONString(student, false);// true:格式化 false(默认):不格式化
System.out.println("Bean转换成Json:"+json);
//json转Bean
String jsonStr = "{\"id\":\"2\",\"name\":\"Json技术\"}";
Book book2 = JSON.parseObject(jsonStr,Book.class);
System.out.println("json字符串转Bean:"+book2.toString());
//json转换成List(Set同理)
String jsonStr2 = "[{\"id\":\"1\",\"name\":\"Java技术\"},{\"id\":\"2\",\"name\":\"Json技术\"}]";
List<Book> bookList = JSON.parseObject(jsonStr2,new TypeReference<ArrayList<Book>>(){});
System.out.println("json字符串转List:"+JSON.toJSONString(bookList,true));
}
}
Gson对json数据的处理
package com.glorze.json;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonUtil {
public static void main(String[] args) {
Set<Book> bookSet = new HashSet<Book>();
Book book=new Book();
book.setId("0808");
book.setName("基督山伯爵");
bookSet.add(book);
Student student = new Student();
student.setName("高老四");
student.setAge(25);
student.setDescribe("男神、帅哥");
student.setSex("男");
student.setBooks(bookSet);
//bean转换成json
Gson gson = new Gson();
String json = gson.toJson(student);
System.out.println("Bean转换成Json:"+json);
//json转Bean
String jsonStr = "{\"id\":\"2\",\"name\":\"Json技术\"}";
Book book2 = gson.fromJson(jsonStr, Book.class);
System.out.println("json字符串转换成Bean:"+book2.toString());
//json转换成List(Set同样)
String jsonList = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";
List<Book> bookList = gson.fromJson(jsonList, new TypeToken<List<Book>>(){}.getType());
String listJson = gson.toJson(bookList);
System.out.println("json转换成List:"+listJson);
}
}
附三个封装工具类
JsonlibUtil.java FastjsonUtil.java GsonUtil.java
下载地址
网盘链接:http://pan.baidu.com/s/1c2mu1Ni 密码:72qh
更多内容请查看 高老四博客
JSON总结-持续更新补充的更多相关文章
- ubuntu命令总结 持续更新 补充
总结一下Ubuntu常用命令 top sudo apt-get install 软件名 安装软件命令 sudo nautilus 打开文件(有root权限) su root 切换到“root” l ...
- iOS之github第三方框架(持续更新)
1.MBProgressHUD MBProgressHUD是一个开源项目,实现了很多种样式的提示框 使用上简单.方便,并且可以对显示的内容进行自定义,功能很强大,很多项目中都有使用到. 到Github ...
- github 上有趣又实用的前端项目(持续更新,欢迎补充)
github 上有趣又实用的前端项目(持续更新,欢迎补充) 1. reveal.js: 幻灯片展示框架 一个专门用来做 HTML 幻灯片的框架,支持 HTML 和 Markdown 语法. githu ...
- 总结js常用函数和常用技巧(持续更新)
学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...
- 白话kubernetes的十万个为什么(持续更新中...) - kubernetes
Kubernetes简称? 答:k8s或kube. Kubernetes是什么? 答:由Google开发的一个强大的平台,可以在集群环境中管理容器化应用程序.本质上是一种特殊的数据库,里面存储的是能够 ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js
BAT 前端开发面经 —— 吐血总结 目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...
- vue-qiankun公司微前端项稳定目落地后的总结(附github仓库demo,将会持续更新)
️本文为博客园社区首发文章,未获授权禁止转载 大家好,我是aehyok,一个住在深圳城市的佛系码农♀️,如果你喜欢我的文章,可以通过点赞帮我聚集灵力️. 个人github仓库地址: https:gi ...
- 神技!微信小程序(应用号)抢先入门教程(附最新案例DEMO-豆瓣电影)持续更新
微信小程序 Demo(豆瓣电影) 由于时间的关系,没有办法写一个完整的说明,后续配合一些视频资料,请持续关注 官方文档:https://mp.weixin.qq.com/debug/wxadoc/de ...
随机推荐
- css元素水平垂直居中的十种方法
四月底在杭州金诚的前端面试过程中,问到了父元素中子元素水平和垂直居中的方式,因为平时疏于整理,只说上来两种.后来面试过了,所以现在回想到这个问题,所以针对各种情况集中整理一下. 首先看页面结构和元素的 ...
- ConcurrentSkipListMap深入分析
1.前言 ConcurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSki ...
- 二叉树遍历 C#
二叉树遍历 C# 什么是二叉树 二叉树是每个节点最多有两个子树的树结构 (1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第h层有叶子结点,并 ...
- 基于Babylonjs自制WebGL3D模型编辑器
一.总述 当代WebGL编程所使用的3D模型大多是从3DsMax模型或Blender模型转化而来,这种工作模式比较适合3D设计师和3D程序员分工配合的场景.但对于单兵作战的WebGL爱好者来讲这种模式 ...
- MySQL锁(MyISAM和InnoDB)
MySQL有三种级别的锁: 1. 页级别 BDB 2. 表级别 MyISAM 3. 行级别 InnoDB 就 总体而言MyISAM表的读和写是串行的.在一定条件下,MyISAM表也支持查询和插入操作的 ...
- 开涛spring3(9.4) - Spring的事务 之 9.4 声明式事务
9.4 声明式事务 9.4.1 声明式事务概述 从上节编程式实现事务管理可以深刻体会到编程式事务的痛苦,即使通过代理配置方式也是不小的工作量. 本节将介绍声明式事务支持,使用该方式后最大的获益是简 ...
- 开涛spring3(3.2) - DI之循环依赖
3.2.1 什么是循环依赖 循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比如CircleA引用CircleB,CircleB引用 CircleC,CircleC引用CircleA ...
- elasticsearch 不能通过9200端口访问
修改配置文件 config/elasticsearch.yml network.host: 0.0.0.0
- 弹出框插件layer使用
layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. 插件官方地址:http://layer.layui.co ...
- 对yield 的理解
最近在学习Python的时候看到yield的相关语法,感觉很独特,相比其他如C/C++的语法比较有意思,于是在看完资料相关章节做一个总结. yield 是一个类似于 return的语法,但是对于ret ...