8 fastJson的使用
Fastjson介绍
Fastjson是一个Java语言编写的JSON处理器,由阿里巴巴公司开发。
1、遵循http://json.org标准,为其官方网站收录的参考实现之一。
2、功能qiang打,支持JDK的各种类型,包括基本的JavaBean、Collection、Map、Date、Enum、泛型。
3、无依赖,不需要例外额外的jar,能够直接跑在JDK上。
4、开源,使用Apache License 2.0协议开源。http://code.alibabatech.com/wiki/display/FastJSON/Home
5、具有超高的性能,java世界里没有其他的json库能够和fastjson可相比了。
如果获得Fastjson?
SVN:http://code.alibabatech.com/svn/fastjson/trunk/
WIKI:http://code.alibabatech.com/wiki/display/FastJSON/Home
Issue Tracking:http://code.alibabatech.com/jira/browse/FASTJSON
如果你使用了Maven,maven repository配置如下:
<repository>
<id>opensesame</id>
<name>Alibaba OpenSource Repsoitory</name>
<url>http://code.alibabatech.com/mvn/releases/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
pom.xml文件中加入依赖依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.9</version>
</dependency>
如果没有使用maven,可以直接下载:
Binary : http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.1.1/fastjson-1.1.1.jar
Source :http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.1.1/fastjson-1.1.1-sources.jar
Subversion : http://code.alibabatech.com/svn/fastjson/
使用介绍:
Fastjson的最主要的使用入口是com.alibaba.fastjson.JSON
import com.alibaba.fastjson.JSON; public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。
使用例子:
两个基础类:
public class Student {
private int id; private String name; /**
* 默认的构造方法必须不能省,不然不能通过json字符串解析成java对象
*/
public Student() {
} public Student(int id, String name) {
this.id = id;
this.name = name;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
public class Teacher {
private int id; private String name; private List<Student> stus;
/**
* 默认的构造方法必须不能省,不然不能通过json字符串解析成java对象
*/
public Teacher() {
} public Teacher(int id, String name) {
this.id = id;
this.name = name;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public List<Student> getStus() {
return stus;
} public void setStus(List<Student> stus) {
this.stus = stus;
} public void addStudent(Student stu){
this.stus.add(stu);
} public void addStudents(List<Student> stus){
for (Student stu : stus) {
this.stus.add(stu);
}
} public void setStudents(List<Student> stus){
this.stus=stus;
}
}
public class JsonTest1 {
public static void main(String[] args) {
Student stu=new Student(1,"one");
//java实例转化成json字符串
String jsonStr=test1(stu);
print();
//json字符串转成java实例
stu=test2(jsonStr);
print();
//集合转成json字符串
jsonStr=test3();
print(); //复杂集合转成json字符串
test4();
print(); }
//java实例转化成json字符串
public static String test1(Student stu){
String jsonStr=JSON.toJSONString(stu);
System.out.println(jsonStr);
return jsonStr;
} //json字符串转成java实例
public static Student test2(String jsonStr){
Student stu=JSON.parseObject(jsonStr,Student.class);
System.out.println("转换前json字符串:"+jsonStr);
System.out.println("转换后:id="+stu.getId()+",name="+stu.getName());
return stu;
} //集合转成json字符串
public static String test3(){
List<Student> list=new ArrayList<Student>();
for(int i=1;i<=3;i++){
list.add(new Student(i,"name "+i));
}
String jsonStr=JSON.toJSONString(list);
System.out.println(jsonStr);
return jsonStr;
} //复杂集合转成json字符串
public static String test4(){
List<Teacher> teaList = new ArrayList<Teacher>();
long time = System.currentTimeMillis();
for(int i=0;i<10;i++) {
Teacher teacher = new Teacher(i, "Teacher " + i);
List<Student> stus = new ArrayList<Student>();
for(int j = 0 ;j<4;j++) {
Student s = new Student(j, "Student" + j);
stus.add(s);
}
teacher.setStudents(stus);
teaList.add(teacher);
}
//true表示按照json格式输出
String jsonStr = JSON.toJSONString(teaList,true);
System.out.println(jsonStr);
return jsonStr;
}
public static void print(){
System.out.println("....................................");
}
}
输出结果:
{"id":1,"name":"one"}
....................................
转换前json字符串:{"id":1,"name":"one"}
转换后:id=1,name=one
....................................
[{"id":1,"name":"name 1"},{"id":2,"name":"name 2"},{"id":3,"name":"name 3"}]
....................................
[
{
"id":0,
"name":"Teacher 0",
"stus":[
{
"id":0,
"name":"Student0"
},
{
"id":1,
"name":"Student1"
},
{
"id":2,
"name":"Student2"
},
{
"id":3,
"name":"Student3"
}
]
},
{
"id":1,
"name":"Teacher 1",
"stus":[
{
"id":0,
"name":"Student0"
},
{
"id":1,
"name":"Student1"
},
{
"id":2,
"name":"Student2"
},
{
"id":3,
"name":"Student3"
}
]
},
{
"id":2,
"name":"Teacher 2",
"stus":[
{
"id":0,
"name":"Student0"
},
{
"id":1,
"name":"Student1"
},
{
"id":2,
"name":"Student2"
},
{
"id":3,
"name":"Student3"
}
]
},
{
"id":3,
"name":"Teacher 3",
"stus":[
{
"id":0,
"name":"Student0"
},
{
"id":1,
"name":"Student1"
},
{
"id":2,
"name":"Student2"
},
{
"id":3,
"name":"Student3"
}
]
},
{
"id":4,
"name":"Teacher 4",
"stus":[
{
"id":0,
"name":"Student0"
},
{
"id":1,
"name":"Student1"
},
{
"id":2,
"name":"Student2"
},
{
"id":3,
"name":"Student3"
}
]
},
{
"id":5,
"name":"Teacher 5",
"stus":[
{
"id":0,
"name":"Student0"
},
{
"id":1,
"name":"Student1"
},
{
"id":2,
"name":"Student2"
},
{
"id":3,
"name":"Student3"
}
]
},
{
"id":6,
"name":"Teacher 6",
"stus":[
{
"id":0,
"name":"Student0"
},
{
"id":1,
"name":"Student1"
},
{
"id":2,
"name":"Student2"
},
{
"id":3,
"name":"Student3"
}
]
},
{
"id":7,
"name":"Teacher 7",
"stus":[
{
"id":0,
"name":"Student0"
},
{
"id":1,
"name":"Student1"
},
{
"id":2,
"name":"Student2"
},
{
"id":3,
"name":"Student3"
}
]
},
{
"id":8,
"name":"Teacher 8",
"stus":[
{
"id":0,
"name":"Student0"
},
{
"id":1,
"name":"Student1"
},
{
"id":2,
"name":"Student2"
},
{
"id":3,
"name":"Student3"
}
]
},
{
"id":9,
"name":"Teacher 9",
"stus":[
{
"id":0,
"name":"Student0"
},
{
"id":1,
"name":"Student1"
},
{
"id":2,
"name":"Student2"
},
{
"id":3,
"name":"Student3"
}
]
}
]
....................................
如果对类中有些字段不解析,可以通过SimplePropertyPreFilter来选取需要需要解析的属性,例子如下:
//类中有个别字段不解析
public static void test5(){
Student stu=new Student(1,"one");
SimplePropertyPreFilter filter=new SimplePropertyPreFilter(Student.class,"id");
String jsonStr=JSON.toJSONString(stu,filter);
System.out.println(jsonStr);
}
输出结果:
{"id":1}
把list集合的json字符串反序列为list集合:
public static void test6(){
List<Student> students = new ArrayList<Student>();
for(int i=0;i<5;i++) {
Student stu = new Student(i, "Student" + i);
students.add(stu);
}
// 过滤哪些属性需要转换
// SimplePropertyPreFilter filter = new SimplePropertyPreFilter(Student.class, "id","age");
// String jsonStu =JSON.toJSONString(students,filter);
String jsonStu =JSON.toJSONString(students);
System.out.println(jsonStu); List<Student> stu =JSON.parseObject(jsonStu, new TypeReference<List<Student>>(){});
for(int i=0;i<stu.size();i++)
{
System.out.println(stu.get(i));
}
}
代码输出:
[{"id":0,"name":"Student0"},{"id":1,"name":"Student1"},{"id":2,"name":"Student2"},{"id":3,"name":"Student3"},{"id":4,"name":"Student4"}]
com.main.etl.server.json.Student@60682430
com.main.etl.server.json.Student@551ffcc2
com.main.etl.server.json.Student@270b5037
com.main.etl.server.json.Student@57bf5ee7
com.main.etl.server.json.Student@54efbcb2
8 fastJson的使用的更多相关文章
- fastjson 混淆注意事项
使用fastjson 注意事项,主要表现: 1.加了符号Annotation 的实体类,一使用就会奔溃 2.当有泛型属性时,一使用就奔溃 在调试的时候不会报错,当你要打包签名混淆包的时候,就会出现上述 ...
- Java的Json解析包FastJson使用
阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser. ...
- fastJson使用
fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,由阿里巴巴的工程师开发. 主要特点: 快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson ...
- FASTJSON
package com.hanqi.test; import java.util.ArrayList;import java.util.Date;import java.util.List; impo ...
- Android总结之json解析(FastJson Gson 对比)
前言: 最近为了统一项目中使用的框架,发现项目中用到了两种json解析框架,他们就是当今非常主流的json解析框架:google的Gson 和阿里巴巴的FastJson,为了废除其中一个所以来个性能和 ...
- Android原生json和fastjson的简单使用
android原生操作json数据 主要是两个类 JSONObject 操作对象 JONSArray操作json数组 对象转json //创建学生对象 Student student=new ...
- FastJson的简单实用
一.FastJson的理解 在工作中,经常客服端需要和服务端进行通信,目前很多项目都采用JSON的方式进行数据传输,简单的参数可以通过手动拼接JSON字符串,但如果请求的参数过多,采用手动拼接JSON ...
- Android JSON、GSON、FastJson的封装与解析
声明: 1.本帖只提供代码,不深入讲解原理.如果读者想要深入了解,那就不要在这个帖子上浪费时间了 2.客户端用的是Google官方的Volley访问服务器,具体了解Volley请戳 这里 3.本帖三种 ...
- java分享第十三天(fastjson生成和解析json数据,序列化和反序列化数据)
fastjson简介:Fastjson是一个Java语言编写的高性能功能完善的JSON库.fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jack ...
- FastJson和AsyncHttpCLient
Android的展示数据,除了上章所讲的本地存储外,大部分数据都来自于网络.首先介绍一下Android APP开发常见的网络操作方式.从网络层面上有底层的tcp/ip,也就是我们常见的socket套接 ...
随机推荐
- 读书笔记_Effective_C++_条款二十二:将成员变量声明为private
1.格式统一 在调用的时候,不会去想有没有(),一律是有get(),或者set()之类的. 2.封装 能直接访问得越少,表明封装性越高, 封装性越高,我们的顾虑就少了, 例如:我们a.data*0.9 ...
- Centos6.5使用yum安装MariaDB
系统版本:Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x8 ...
- Ajax实现三级联动(0520)
查询数据库中的chinastates表,通过父级代号查询相应省市区. 实现界面: 在js页面实现三级联动 在JQuery中调用Ajax方法(引用JQuery文件一定放在最上面) 用插件的形式,创建三个 ...
- html meta标签属性用法集合
1.<meta name="generator" contect="">用以说明生成工具(如Microsoft FrontPage 4.0)等: 2 ...
- 内核参数优化之2-1 tcp/ip 标志位报文解析
以下内容纯属虚构,切勿轻易相信! 众所周知,tcp/ip三次握手和四次挥手,均由syn/ack/fin三个标志位报文决定,但是这三个标志位报文,并不是说在构建连接的时候只发送一次的,因为协议不知道网络 ...
- 安卓网络请求之——OkHttp学习
之前做安卓项目的时候,HTTP请求用的是android api中的HttpURLConnection和HttpClient,编码比较繁琐,自己封装的也不好.后来知道有很多网络请求的第三方框架,可以方便 ...
- OCR中的倾斜矫正
电面中被问到了做的LPR,简单的介绍了下后又问到了关于如何矫正倾斜角的问题.答得比较含糊,所以今天来补充一下. 倾斜矫正的方法有很多种,包括基于Hough变换的矫正,基于字符投影的倾角矫正,常规线性角 ...
- 一个图片上传的servlet,传到本地磁盘,要传到服务器请修改
本来想写个controller,结果拦截器把图片拦住了,那就直接servlet public class UploadEamge extends HttpServlet{ /** * */ priva ...
- 这样就算会了PHP么?-1
公司有用到这些业务,多了解一下总是没错的. 现在开始一系列的PHP学习啦... <?php $boo=true; if($boo==true) echo '变量$boo为真!'; else ec ...
- FastMM内存泄露
转自:http://www.2ccc.com/article.asp?articleid=4879FastMM是非常优秀的内存管理器,但是从FastMM4Options.inc中找到合适自已程序的选项 ...