基本的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. Telegram学习解析系列(二):这我怎么给后台传输数据?

    写在前面: 在iOS开发的过程中,有很多时候我们都在和数据打交道,最基本的就是数据的下载和上传了,估计很多很多的小伙伴都在用AFNetworking与后台数据打交道,可有没有想过,哪天AFNetwor ...

  2. .net Ajax与后台一般处理程序(ashx) 交互

    本文主要实现无动态刷新查询后台数据功能,主要用到ajax+ashx+sqlserver进行交互. 首先需要引用Jquery: <script language="javascript& ...

  3. Java7中的ForkJoin并发框架初探(上)——需求背景和设计原理

    原文:发表于 2013 年 8 月 26 日 由 三石 0. 处理器发展和需求背景 回想一下并发开发的初衷,其实可以说是有两点,或者说可以从两个方面看. 对于单核的处理器来说,在进行IO操作等比较费时 ...

  4. 基于本地文件系统的LocalDB

    零.前言 之前写一些小工具的时候,需要用到数据存储方面的技术,但是用数据库又觉得太大了,本地文件存储txt文件存储又不是很规范,于是乎想到了去编写一个简单的基于本地文件系统的数据存储库,暂且叫它loc ...

  5. 【转】c++ new操作符的重载

    基本概念: 1. 操作符重载:C++支持对某个操作符赋予不同的语义 2. new操作符:申请内存,调用构造函数 关于c++ new操作符的重载 你知道c++ 的new 操作符和operator new ...

  6. php 使用composer

    之前写过相关的composer,之后碰到了几个朋友问我,我整理了一下,方便自己也方便大家日后查阅~~不玩开源的程序员不是好厨子     1.执行在线安装         curl -sS https: ...

  7. struts2.5能不能再恶心点

    Caused by: java.lang.IllegalArgumentException: unknown reserved key '_typeConverter' at ognl.OgnlCon ...

  8. MD5加密算法(信息摘要算法)、Base64算法

    1 什么是MD5 信息摘要算法,可以将字符进行加密,每个加密对象在进行加密后都是等长的 应用场景:将用户密码经过MD5加密后再存储到数据库中,这样即使是超级管理员也没有能力知道用户的具体密码是多少:因 ...

  9. python读写文件相关内容

    1.python读取文件 f = open('E:/info.txt', 'r')#用read的方式打开a = 0for line in f.readlines():读取没一行,就是读取所有文件的意思 ...

  10. Redis 集群搭建详细指南

    先有鸡还是先有蛋? 最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公司?我的回答都是大城市!大公司! 为什么这么说呢,你想一下,无论女孩男孩找朋友都喜欢找个子高胸大的.同样的道理嘛 ...