佛山企业网站设计,企业模块,开发微信小程序用什么语言,在线收录 JSON现在常用来做前后端数据交互#xff0c;两个蝴蝶飞只是简单的对JSON做一下讲解和简单使用。关于JSON,我还了解的远远不够。由于本人经验有限#xff0c;嘴皮子不溜#xff0c;所以学术性#xff0c;概念性#xff0c;底层性的知识点暂时不做介绍。文章中有错误之处… JSON现在常用来做前后端数据交互两个蝴蝶飞只是简单的对JSON做一下讲解和简单使用。关于JSON,我还了解的远远不够。由于本人经验有限嘴皮子不溜所以学术性概念性底层性的知识点暂时不做介绍。文章中有错误之处欢迎拍砖和指点。在此特别向阿里团队表示感谢谢谢他们开发出了FastJSON这么好用的Jar包并且免费开源出来。 两个蝴蝶飞只是粗浅的谈一下使用非常抱歉未能理解前辈们深邃的思想。 上一章简单介绍了JSON简介及前端简单解析一,如果没有看过请观看上一章 一 FastJSON简短介绍
JSON协议使用方便越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的Json框架。
FastJson的特点:
1.FastJson数度快,无论序列化和反序列化,都是当之无愧的fast
2.功能强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
3.零依赖(没有依赖其它任何类库)
首先要下载fastjson的jar包。github地址: https://github.com/alibaba/fastjson
这里只牵扯到后端方面用Junit4框架进行测试
二 FastJSON三个类的简单介绍
FastJSON包中有三个常用的对象,JSON,JSONObject,JSONArray三个对象。
二.一 JSON类
public abstract class JSON implements JSONStreamAware, JSONAware{}JSON类实现了JSONStreamAware和JSONAware接口。
JSONAware接口:
package com.alibaba.fastjson;
public abstract interface JSONAware
{//转换成JSON类型的字符串public abstract String toJSONString();
}JSONStreamAware接口:
public abstract interface JSONStreamAware //JSON流Aware 能力
{// 向里面写Appendable, 追加。 转换成JSON字符串public abstract void writeJSONString(Appendable paramAppendable)throws IOException;
}Appendable接口:
public interface Appendable {
//添加字符串Appendable append(CharSequence csq) throws IOException;
//添加的字符串可以截取 start,endAppendable append(CharSequence csq, int start, int end) throws IOException;
//添加单个字符Appendable append(char c) throws IOException;
}二.二 JSONObject 类
public class JSONObject extends JSONimplements MapString, Object, Cloneable, Serializable, InvocationHandler{}JSONObject类继承了JSON类实现了Map接口Cloneable(克隆接口),序列化(Serializable),InvocationHandler(调用处理器)
InvocationHandler.java
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable;默认值为16。
所以JSONObject主要存储的方式是以MapKey,Value的形式进行相应的存储。存储的是单值形式。
构造方法:
public JSONObject(MapString, Object map) {this.map map;}二.三 JSONArray类
public class JSONArray extends JSONimplements ListObject, Cloneable, RandomAccess, Serializable{}JSONArray类也继承了JSON类 实现了List接口Cloneable克隆接口Serializable 序列化接口,RandomAccess接口。
public interface RandomAccess {}实现了List接口是以数组的形式进行相应的存储。
构造方法:
public JSONArray(ListObject list) {this.list list;}JSONObject和JSONArray均实现了JSON类故一般都是用子类即单值用JSONObject,集合用JSONArray。
三 JSONObject类的具体使用
三.一 转换成普通字符串格式
转换的格式为: var obj{“name”:“两个蝴蝶飞”,“age”:24,“sex”:“男”};
代码为:
/*** 一个普通的字符串格式.* var obj{name:两个蝴蝶飞,age:24,sex:男};* 用JSONObject进行添加.*/Testpublic void testString1(){//空构造JSONObject jsonnew JSONObject();//内部使用的是map结构,put放置值json.put(id,1);json.put(name,两个蝴蝶飞);json.put(age,24);json.put(sex,男);//转换成json字符串. toJSONString()String resultjson.toJSONString();System.out.println(result);}是字符串格式。
三.二 将JSON字符串进行解析取值
Test/** 解析JSON字符串* {name:两个蝴蝶飞,age:24,sex:男};*/public void testToString1(){String source{name:两个蝴蝶飞,age:24,sex:男};//利用静态方法parseObject(source),将要解析的资源放进去JSONObject jsonJSON.parseObject(source);//取得数据时 可以取得具体的类型System.out.println(json.getIntValue(age));System.out.println(json.getString(sex));System.out.println(json.getString(name));}三.三 利用Map显式放置值
Test/*** 前面带一个前缀. 用添加Map* {person:{name:两个蝴蝶飞,age:24,sex:男}}*/public void testString2(){MapString,Object mapnew HashMapString,Object();map.put(name,岳建立);map.put(age,24);map.put(sex,男);JSONObject jsonnew JSONObject();json.put(person,map);String resultjson.toJSONString();System.out.println(result);//如果不要前缀可以直接 {name:两个蝴蝶飞,age:24,sex:男}//System.out.println(JSON.toJSONString(map));}三.四 取出Map中的值
Testpublic void testToString2(){String source{\person\:{\sex\:\男\,\name\:\岳建立\,\age\:24}};JSONObject jsonJSON.parseObject(source);System.out.println(json.getString(person));// {name:两个蝴蝶飞,age:24,sex:男}//继续取出JSONObject json2JSON.parseObject(json.getString(person));System.out.println(json2.getString(name));System.out.println(json2.getString(sex));System.out.println(json2.getIntValue(age));}四 JSONArray的使用
如果属性过多的话那么就需要用一个User类进行相应的封装了。即开始引入对象了。
引入相应的User的类
package com.fastjson.pojo;
/***author 作者 两个蝴蝶飞*version 创建时间 2018年9月16日下午3:42:37
*/
public class User {private int id;private String name;private int age;private String sex;private String content;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex sex;}public int getId() {return id;}public void setId(int id) {this.id id;}public String getContent() {return content;}public void setContent(String content) {this.content content;}Overridepublic String toString() {return User [id id , name name , age age ];}
}四.一 JSONArray 配置单个JavaBean类
前缀没有用key值:
Test/*** 将一个单对象转换成JSON格式* {age:24,content:一个小小的程序员,id:1,name:两个蝴蝶飞,sex:男}*/public void testUser1(){User usernew User();user.setId(1);user.setName(两个蝴蝶飞);user.setSex(男);user.setAge(24);user.setContent(一个小小的程序员);//直接用JSON.toJSONString(); toJSONString(user)String resultJSON.toJSONString(user);System.out.println(result);}前缀有key值
Test
public void testUser1(){User usernew User();user.setId(1);user.setName(两个蝴蝶飞);user.setSex(男);user.setAge(24);user.setContent(一个小小的程序员);//用JSONObjectJSONObject jsonnew JSONObject();json.put(user,user);String resultjson.toJSONString();System.out.println(result);}取出没有key值的Java Bean
Testpublic void testToUser4(){String source{\age\:24,\content\:\一个小小的程序员\,\id\:1,\name\:\两个蝴蝶飞\,\sex\:\男\};//直接转换成对象User user1JSON.parseObject(source,User.class);System.out.println(user1);}取出有key值的的Java Bean
Testpublic void testToUser1(){String source{\user\:{\age\:24,\content\:\一个小小的程序员\,\id\:1,\name\:\两个蝴蝶飞\,\sex\:\男\}};//直接转换成对象//先取出后面的值String resultJSON.parseObject(source).getString(user);
//继承转换User user1JSON.parseObject(result,User.class);System.out.println(user1);}四.二 JSONArray 配置List 集合
Test//将一个对象数组集合添加到JSON中用JSONArray/*{persons:[{age:0,content:小小的程序员而已0,id:0,name:两个蝴蝶飞0,sex:男},{age:0,content:小小的程序员而已1,id:1,name:两个蝴蝶飞1,sex:女},{age:0,content:小小的程序员而已2,id:2,name:两个蝴蝶飞2,sex:男}]}*/public void testUser2(){ListUser users new ArrayListUser(); for (int i 0; i 3; i) { User u new User(); u.setId((i));u.setName(两个蝴蝶飞i);u.setContent(小小的程序员而已i);u.setSex(i % 2 0 ? 男 : 女); users.add(u); }//String resultJSON.toJSONString(users);JSONObject jsonnew JSONObject();json.put(persons,users);String resultjson.toJSONString();System.out.println(result);}解析List集合
Testpublic void testToUser2(){String resource{\list\:[{\id\:0,\name\:\两个蝴蝶飞0\,\sex\:\男\} {\id\:1,\name\:\两个蝴蝶飞1\,\sex\:\女\},{\id\:2,\name\:\两个蝴蝶飞2\,\sex\:\男\}]};String textJSON.parseObject(resource).getString(list);//现在,这已经是一个数组了.如何将数组进行解析呢? 用JSONArrayJSONArray arraysJSON.parseArray(text);ListUser allListnew ArrayListUser();for(int i0;iarrays.size();i){//用toJavaObject toJavaObjectUser uJSON.toJavaObject(arrays.getJSONObject(i),User.class);allList.add(u);}for (User user : allList) {System.out.println(user.getId(),user.getName());}}这是常用的几种解析方式。谢谢
解析成功谢谢!!!