前言
Json簡介
JSON全稱JavaScript Object Notation js物件標記語言,實際上就是符合JSON格式規範的字串,所有的資料都可以轉換成JSON,而頁面和後臺程式直接通過String進行資料互動,當這些String符合JSON格式的話就會很快的被解析還原成原本的資料型別。
在純Java環境中我們也可以使用Json來處理一些資料,例如物件的序列化,我們可以使用把物件轉化成Json在本地儲存。
基本的Json資料格式
1.物件型別以及Map的Json格式是:{“key”:”value”,”key2”:”value”}
例如:
User u = new User();u.setUsername(“abc”);u.setPassword(“b”);
物件u轉化成Json之後為:{“username”:”abc”,”password”:”b”}
2.陣列/list/set 的Json格式是:[元素1,元素2...]
例如:
int[] a = {12,343,23,125,26};
陣列a轉化成Json之後為:[12,343,23,125,26]
User[] arrayUsers={u,u}
物件陣列arrayUsers轉化成Json之後為:[{“username”:”abc”,”password”:”b”},{“username”:”abc”,”password”:”b”}]
Fastjson簡介
fastjson 是一個效能很好的 Java 語言實現的 JSON 解析器和生成器,來自阿里巴巴的工程師開發。 主要特點:
- 快速FAST(比其它任何基於Java的解析器和生成器更快,包括jackson) 強大(支援普通JDK類包括任意Java Bean
- Class、Collection、Map、Date或enum) 零依賴(沒有依賴其它任何類庫除了JDK)
在使用中我們只需要匯入相關的jar包就可以通過fastjson來對Json進行處理了。
Fastjson的使用
基本使用
- 匯入jar包
- 使用相關的方法
本文中使用到的實體類如下
public class Userinfo {
String name;
int age;
String sex;
@Override
public String toString() {
return "Userinfo [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
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 Userinfo() {
super();
// TODO Auto-generated constructor stub
}
public Userinfo(String name, int age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public Userinfo(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
複製程式碼
實體類轉為Json
Userinfo info = new Userinfo("馬畫藤", 30,"男");
String str_json = JSON.toJSONString(info); //
System.out.println("實體轉化為Json" + str_json);
複製程式碼
執行結果為:實體轉化為Json{"age":30,"name":"馬畫藤","sex":"男"}
list轉Json
List<Userinfo> list = new ArrayList<Userinfo>();
Userinfo userinfo1 = new Userinfo("lisi", 15);
Userinfo userinfo2 = new Userinfo("wangwu", 16);
list.add(userinfo1);
list.add(userinfo2);
String json = JSON.toJSONString(list, true);
System.out.println("List集合轉json格式字串 :" + json);
複製程式碼
toJSONString方法後面的引數中的true代表是否格式化輸出結果,不管是true還是fasle對結果是沒有影響的,只是格式不一樣。
執行結果為:
List集合轉json格式字串 :[
{
"age":15,
"name":"lisi"
},
{
"age":16,
"name":"wangwu"
}
]
複製程式碼
Json轉化為字元陣列
//定義一個陣列
String arrayAyy = "[[\'馬雲',50],null,[\'馬化騰',30]]";
//將陣列轉化為JSONArray
JSONArray array = JSONArray.parseArray(arrayAyy);
System.out.println("陣列:" + array);
System.out.println("陣列長度: " + array.size());
//通過方法去除空值null
Collection nuCon = new Vector();
nuCon.add(null);
array.removeAll(nuCon);
System.out.println("陣列:" + array);
System.out.println("陣列長度: " + array.size());
複製程式碼
執行結果為:
陣列:[["馬雲",50],null,["馬化騰",30]] 陣列長度: 3 陣列:[["馬雲",50],["馬化騰",30]] 陣列長度: 2
複雜資料型別轉Json
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("username", "zhangsan");
map.put("age", 24);
map.put("sex", "男");
// map集合
HashMap<String, Object> temp = new HashMap<String, Object>();
temp.put("name", "xiaohong");
temp.put("age", "23");
map.put("girlInfo", temp);
// list集合
List<String> list = new ArrayList<String>();
list.add("爬山");
list.add("騎車");
list.add("旅遊");
map.put("hobby", list);
String jsonString = JSON.toJSONString(map);
System.out.println("複雜資料型別map:" + jsonString);
jsonString = JSON.toJSONString(list);
System.out.println("複雜資料型別list:" + jsonString);
複製程式碼
執行結果為:
複雜資料型別map:{"sex":"男","username":"zhangsan","age":24,"hobby":["爬山","騎車","旅遊"],"girlInfo":{"age":"23","name":"xiaohong"}}
複雜資料型別list:["爬山","騎車","旅遊"]
Json反序列為物件
String json = "{\"name\":\"chenggang\",\"age\":24}";
Userinfo userInfo = JSON.parseObject(json, Userinfo.class);
System.out.println("姓名是:" + userInfo.getName() + ", 年齡是:"
+ userInfo.getAge());
複製程式碼
執行結果為:
姓名是:chenggang, 年齡是:24
日期格式化
Date date = new Date();
System.out.println("輸出毫秒值:" + JSON.toJSONString(date));
System.out.println("預設格式為:"
+ JSON.toJSONString(date,
SerializerFeature.WriteDateUseDateFormat));
System.out.println("自定義日期:"
+ JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd",
SerializerFeature.WriteDateUseDateFormat));
複製程式碼
執行結果為:
輸出毫秒值:1534732296011
預設格式為:"2018-08-20 10:31:36"
自定義日期:"2018-08-20"
我不能保證每一個地方都是對的,但是可以保證每一句話,每一行程式碼都是經過推敲和斟酌的。希望每一篇文章背後都是自己追求純粹技術人生的態度。 永遠相信美好的事情即將發生。