基本的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总结-持续更新补充的更多相关文章

  1. ubuntu命令总结 持续更新 补充

    总结一下Ubuntu常用命令   top sudo apt-get install 软件名 安装软件命令 sudo nautilus 打开文件(有root权限) su root 切换到“root” l ...

  2. iOS之github第三方框架(持续更新)

    1.MBProgressHUD MBProgressHUD是一个开源项目,实现了很多种样式的提示框 使用上简单.方便,并且可以对显示的内容进行自定义,功能很强大,很多项目中都有使用到. 到Github ...

  3. github 上有趣又实用的前端项目(持续更新,欢迎补充)

    github 上有趣又实用的前端项目(持续更新,欢迎补充) 1. reveal.js: 幻灯片展示框架 一个专门用来做 HTML 幻灯片的框架,支持 HTML 和 Markdown 语法. githu ...

  4. 总结js常用函数和常用技巧(持续更新)

    学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...

  5. 白话kubernetes的十万个为什么(持续更新中...) - kubernetes

    Kubernetes简称? 答:k8s或kube. Kubernetes是什么? 答:由Google开发的一个强大的平台,可以在集群环境中管理容器化应用程序.本质上是一种特殊的数据库,里面存储的是能够 ...

  6. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  7. BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js

    BAT 前端开发面经 —— 吐血总结   目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...

  8. vue-qiankun公司微前端项稳定目落地后的总结(附github仓库demo,将会持续更新)

    ️本文为博客园社区首发文章,未获授权禁止转载 大家好,我是aehyok,一个住在深圳城市的佛系码农‍♀️,如果你喜欢我的文章,可以通过点赞帮我聚集灵力️. 个人github仓库地址: https:gi ...

  9. 神技!微信小程序(应用号)抢先入门教程(附最新案例DEMO-豆瓣电影)持续更新

    微信小程序 Demo(豆瓣电影) 由于时间的关系,没有办法写一个完整的说明,后续配合一些视频资料,请持续关注 官方文档:https://mp.weixin.qq.com/debug/wxadoc/de ...

随机推荐

  1. Docker - 访问仓库

    仓库与注册服务器 仓库(Repository)集中存放镜像的项目或目录. 注册服务器(Registry)管理仓库的服务器,服务器上可以有多个仓库,每个仓库有多个镜像. 例如:在仓库地址docker.i ...

  2. 使用java对文件批量重命名

    有时候从网络上下载的电视剧或者动漫,名字上都会被该网站加上前缀或者后缀,如图: 那么处女座的同学就不同意了,不行,我就是想让它按照我的习惯方式命名!但是呢,一个个修改是不是特别麻烦,如果是上百个呢?如 ...

  3. 初识数据库连接池开源框架Druid

    Druid是阿里巴巴的一个数据库连接池开源框架,准确来说它不仅仅包括数据库连接池这么简单,它还提供强大的监控和扩展功能.本文仅仅是在不采用Spring框架对Druid的窥探,采用目前最新版本druid ...

  4. linux统计多个文件大小总和

    首先:查看当前文件夹大小的命令是: [root@host1 test]# du -sh 39M . 查看当前文件夹下所有文件的大小: [root@host1 test]# du -sh * 108K ...

  5. Day3-函数及作用域

    一.函数定义:一组代码片段用函数名封装起来,通过函数名的方式调用执行. 特性: 1.减少重复代码 2.使程序易扩展 3.使程序易维护 语法定义: def sayhi(): print("he ...

  6. UITextField关闭自动联想功能

    在textField输入内容时,如果内容为英文,输入的英文如果不正确的单词就是有红色的线报警,关闭英文自动联想功能 self.autocorrectionType = UITextAutocorrec ...

  7. Plupload上传插件自定义图片的修改

    若自定义的一个上传图片效果,代码(可能不全),当用户再次点击所有或任意一个上传图片的input时,uploader.files已经多了客户再次上传的图片,但是你就想要最后的两张图片,这就可以使用到up ...

  8. 002---第一个Hibernate示例

    Hibernate压缩文件结构 下载Hibernate压缩文档,下面为文件结构: Hibernate3.jar:为Hibernate的核心jar包: build.xml:重新打包配置文件 build. ...

  9. python学习之爬虫(一) ——————爬取网易云歌词

    接触python也有一段时间了,一提到python,可能大部分pythoner都会想到爬虫,没错,今天我们的话题就是爬虫!作为一个小学生,关于爬虫其实本人也只是略懂,怀着"Done is b ...

  10. python-广度优先搜索

    广度优先搜索 下面我们来来BFS算法策略: 比如:我们要从双子峰---->金门大桥,最短路径如何? 我们利用广度优先搜索来一步步求解,注意广度优先搜索在于的关键在于"广",也 ...