千家信息网

Json的详细介绍以及fastjson使用教程

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要介绍"Json的详细介绍以及fastjson使用教程",在日常操作中,相信很多人在Json的详细介绍以及fastjson使用教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2025年02月03日Json的详细介绍以及fastjson使用教程

这篇文章主要介绍"Json的详细介绍以及fastjson使用教程",在日常操作中,相信很多人在Json的详细介绍以及fastjson使用教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Json的详细介绍以及fastjson使用教程"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Json是一种轻量级的数据交换格式,采用一种"键:值"对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。在使用Java做Web开发时,不可避免的会遇到Json的使用。下面我们就简单讲一下Json的使用以及fastjson.jar包的使用。

一:JSON形式与语法

1.1:JSON对象

我们先来看以下数据:

{        "ID": 1001,        "name": "张三",        "age": 24}

第一个数据就是一个Json对象,观察它的数据形式,可以得出以下语法:

1:数据在花括号中

2:数据以"键:值"对的形式出现(其中键多以字符串形式出现,值可取字符串,数值,甚至其他json对象)

3:每两个"键:值"对以逗号分隔(最后一个"键:值"对省略逗号)

遵守上面3点,便可以形成一个json对象。

1.2:JSON对象数组

接下来我们再看第二个数据,观察它的数据形式,可以得出以下语法:

[        {"ID": 1001, "name": "张三", "age": 24},        {"ID": 1002, "name": "李四", "age": 25},        {"ID": 1003, "name": "王五", "age": 22}]

1:数据在方括号中(可理解为数组)

2:方括号中每个数据以json对象形式出现

3:每两个数据以逗号分隔(最后一个无需逗号)

遵守上面3点,便可形成一个json对象数组(及一个数组中,存储了多个json对象)

理解了上面两种基本的形式,我们就可以得出其他的数据形式,例如下面这个:

{        "部门名称":"研发部",        "部门成员":[        {"ID": 1001, "name": "张三", "age": 24},        {"ID": 1002, "name": "李四", "age": 25},        {"ID": 1003, "name": "王五", "age": 22}],        "部门位置":"xx楼21号"}

这是上面两个基本形式结合出来的一种变形,通过这种变形,使得数据的封装具有很大的灵活性,能让开发者自由的发挥想象力。

1.3:JSON字符串

JSON字符串也是在平时开发中使用较多的,json字符串应满足以下条件:

1:它必须是一个字符串,由" "或者' '包裹数据,支持字符串的各种操作

2:里面的数据格式应该要满足其中一个格式,可以是json对象,也可以是json对象数组或者是两种基本形式的组合变形。

总结:json可以简单的分为基本形式:json对象,json对象数组。两种基本格式组合变形出其他的形式,但其本质还是json对象或者json对象数组中的一种。json对象或对象数组可以转化为json字符串,使用于不同的场合。

注意点:在封装json数据的时候,很容易出现错误,比如粗心的在最后一条数据的末尾加上了逗号等等,这里我提供一个在线验证工具,方便大家验证json数据格式的正确性

http://www.bejson.com/

二:fastjson介绍与使用

2.1:fastjson简介与jar下载

fastjson.jar是阿里爸爸开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。除了这个fastjson以外,还有Google开发的Gson包,其他形式的如net.sf.json包,都可以实现json的转换。方法名称不同而已,最后的实现结果都是一样的。

将json字符串转化为json对象在net.sf.json中是这么做的JSONObject obj = new JSONObject().fromObject(jsonStr);//将json字符串转换为json对象在fastjson中是这么做的JSONObject obj=JSON.parseObject(jsonStr);//将json字符串转换为json对象

今天我们主要讲fastjson的使用,首先应该在Java工程中导入对应的fastjson.jar包,

fastjson.jar包原始下载地址:https://github.com/alibaba/fastjson

点击页面中的download即可下载最新的包

fastjson.jar包百度云盘下载地址:https://pan.baidu.com/s/1CCGoRCdSjNUDB736cRCDBw

2.2:fastjson源码分析与使用

在包中,可以发现主要的3个类,JSON,JSONArray,JSONObject

三者之间的关系如下,JSONObject和JSONArray继承JSON

观察该类的继承与实现关系,不难发现,JSONObject实现了Map接口,而json对象中的数据都是以"键:值"对形式出现,可以猜想, JSONObject底层操作是由Map实现的。

再来看类中的主要方法:

看其源码,可以发现,内部主要是由get(key)方法实现,找到这个方法如下:

发现内部主要由Map接口中的get()方法实现。

再去看JSONObject中另一个常用的方法getInteger(String key),该方法获取json对象中的整型数据,例如获取"age:20"键值对中age对应的整型数值20.

总结:JSONObject对应json对象,通过各种形式的get()方法可以获取json对象中的数据,也可利用诸如size(),isEmpty()等方法获取"键:值"对的个数和判断是否为空。其本质是通过实现Map接口并调用接口中的方法完成的。

JSONArray类源码分析与使用

其内部主要有List接口中的对应方法来实现。

跟JSONObject一样,JSONArray里面也有一些get()方法,不过都不常用,最有用的应该是getJSONObject(int index)方法,该方法用于获取json对象数组中指定位置的JSONObject对象,配合size()方法,可用于遍历json对象数组中的各个对象。

通过以上两个方法,在配合for循环,即可实现json对象数组的遍历,当然JSONArray中也实现了迭代器方法来遍历,这和List的遍历极为相似。

该方法经过多次重载,但最终都是实现json对象转化为json字符串和javabean对象转化为json 字符串。其中,有关键字transient修饰的toJSONString()用于json对象序列化过程中,希望某个"键:值"对数据不变的应用中。

JSON类之parseObject()方法,实现json字符串转换为json对象或javabean对象

该方法返回JSONObject对象,用于实现json字符串向json对象的转化,其内部调用了parse()方法,调用底层的DefaultJSONParser解析类进行转化,在转化失败时,抛出can not cast to JSONObject异常。

该方法不仅能实现json字符串向json对象的转化,经过重载之后,还能实现json字符串向javabean对象的转化

json字符串与javaBean之间的转换可以使用 TypeReference 这个类,也可以使用Class这个类。

Student stu1=JSON.parseObject(jsonstr,new TypeReference(){});Student stu1=JSON.parseObject(jsonstr,Student.class);

我推荐使用第二种Class类反射来实现,比较简单。

JSON类之JSONArray()方法,实现json字符串转化为json对象数组或List

与parseObject()方法类似,parseArray()将json字符串转化为json对象数组或转化成包含泛型的List

JSON类之toJSON()方法,实现javabean对象转化为json对象

该方法用的比较少,主要用于将javabean对象转化为json对象,内部通过Map,LinkedHashMap,HashMap等集合接口实现。

至此,JSON类中的方法也讲解的差不多了,下面给出Java实例来实现以上的各种转换。

测试类:

package jsonTest;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.alibaba.fastjson.TypeReference;public class MyJson {                public static void main(String[] args) {                                List list=new ArrayList<>();                Student student=new Student("bob",24);                Student student12=new Student("lily", 23);                list.add(student);                list.add(student12);                System.out.println("*******javaBean  to jsonString*******");                String str1=JSON.toJSONString(student);                System.out.println(str1);                System.out.println(JSON.toJSONString(list));                System.out.println();                                System.out.println("******jsonString to javaBean*******");                //Student stu1=JSON.parseObject(str1,new TypeReference(){});                Student stu1=JSON.parseObject(str1,Student.class);                System.out.println(stu1);                System.out.println();                                System.out.println("******javaBean to jsonObject******");                JSONObject jsonObject1=(JSONObject)JSON.toJSON(student);                System.out.println(jsonObject1.getString("name"));                System.out.println();                                System.out.println("******jsonObject to javaBean******");                Student student2=JSON.toJavaObject(jsonObject1, Student.class);                System.out.println(student2);                System.out.println();                                System.out.println("*******javaBean to jsonArray******");                List stulist=new ArrayList<>();                for(int i=0;i<5;i++){                        stulist.add(new Student("student"+i, i));                                        }                JSONArray jsonArrays=(JSONArray)JSON.toJSON(stulist);                for(int i=0;i myList=new ArrayList<>();                for(int i=0;i

测试类对应的javabean类:

package jsonTest;public class Student {                private String name;        private int age;                public Student() {                // TODO Auto-generated constructor stub        }                public Student(String name,int age){                this.name=name;                this.age=age;        }                public void setName(String name){                this.name=name;                        }                public String getName(){                return name;        }                public void setAge(int age){                this.age=age;        }                public int getAge(){                return age;        }                @Override        public String toString() {                // TODO Auto-generated method stub                return "student [name="+name+">

到此,关于"Json的详细介绍以及fastjson使用教程"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

对象 方法 数据 字符 字符串 形式 数组 接口 格式 开发 逗号 教程 两个 学习 源码 语法 部门 张三 观察 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 佛山市优通网络技术 我的世界服务器主城保护传送指令 徐州徐软软件开发公司怎么样 2018年网络安全主题会议 网络安全文明知识题库简答 宜兴互联网智能科技产品是什么 家用路由器服务器无响应 虹口区常规软件开发报价业务流程 软件开发能力一览 上位机 数据库 下载 电脑网络安全保护如何开启 网络安全及涉密工作 jsp服务器源码 数据库主表和从表的继承关系 自考本科计算机网络技术试题 网络技术与应用证书中国大学 web服务器排行 c 如何查询数据库数据库 江宁区网络安全宣传进校园有奖 数据库怎么组织 我的世界服务器主城保护传送指令 宜昌网络安全专业学校有哪些 太空狼人杀为什么服务器老是中断 网络安全技术比赛现场 微信服务器如何登录 主播软件开发公司 荔情居网络技术有限公司 网络安全常见试题 网络安全法传谣 北京永福网络技术有限公司
0