在程序開發(fā)過程中,在參數(shù)傳遞,函數(shù)返回值等方面,越來(lái)越多的使用JSON。JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,同時(shí)也易于機(jī)器解析和生成、易于理解、閱讀和撰寫,而且Json采用完全獨(dú)立于語(yǔ)言的文本格式,這使得Json成為理想的數(shù)據(jù)交換語(yǔ)言。
JSON建構(gòu)于兩種結(jié)構(gòu):
“名稱/值”對(duì)的集合(ACollection of name/value pairs),在不同的語(yǔ)言中,它被理解為對(duì)象(Object), 記錄(record), 結(jié)構(gòu)(struct), 字典(dictionary), 有趣列表(keyed list), 哈希表(hash table)或者關(guān)聯(lián)數(shù)組(associative array)。
JSONObject依賴:最后一行需要保留(不可修改為8或1.8),有兩個(gè)jdk版本的實(shí)現(xiàn):json-lib-2.4-jdk13.jar和json-lib-2.4-jdk15.jar
pom(本文所有代碼僅使用這一個(gè)依賴即可):
json-lib
json-lib依賴時(shí)報(bào)錯(cuò)的文章參考鏈接:https://blog.csdn.net/xijinno1/article/details/128722034?spm=1001.2014.3001.5502
JSONObject先了解JSONObject是什么?
JSONObject是一種數(shù)據(jù)結(jié)構(gòu),可以理解為JSON格式的數(shù)據(jù)結(jié)構(gòu)(key-value結(jié)構(gòu)),可以使用put方法給json對(duì)象添加元素。JSONObject可以很方便的轉(zhuǎn)換成字符串,也可以很方便的把其他對(duì)象轉(zhuǎn)換成JSONObject對(duì)象。
再繼續(xù)說(shuō)明JSONObject
代碼:
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class Demo {
public static void main(String[] args) {
//創(chuàng)建JSONObject
JSONObject json = new JSONObject();
//添加屬性
json.put("username", "張三");
json.put("password", "123");
//打印
System.out.println(json);
//增加屬性
json.element("sex", "男");
json.put("age", 18);
System.out.println(json);
//根據(jù)key返回
System.out.println(json.get("sex"));
//判斷輸出對(duì)象的類型
boolean isArray = json.isArray();
boolean isEmpty = json.isEmpty();
boolean isNullObject = json.isNullObject();
System.out.println("是否數(shù)組:"+isArray+", 是否空:"+isEmpty+", 是否空為空對(duì)象:"+isNullObject);
System.out.println("===============================================");
//把JSONArray添加到JSONObject中
JSONArray jsonArray = new JSONArray();
jsonArray.add(0, "張三");
jsonArray.add(1, "123");
//開始添加
json.element("student", jsonArray);
System.out.println(json);
}
}
運(yùn)行結(jié)果:
JSONArray是一個(gè)有序的值序列。它的外部文本形式是一個(gè)用方括號(hào)括起來(lái)的字符串,用逗號(hào)分隔值。內(nèi)部表單是具有索引的對(duì)象get和opt用于通過索引訪問值的element方法,以及用于添加或替換值的方法。它的值可以是任何這些類型的:Boolean,JSONArray,JSONObject, Number,String,或 JSONNull object。
所以JSONArray就是["tom","kate","jerry"];或者[1,2,3]
同時(shí),這里的數(shù)組json通過添加對(duì)象json可以變成數(shù)組對(duì)象json:
[{"name":"tom"},{"name":"kate"}]
再繼續(xù)說(shuō)明JSONArray代碼:
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class Demo {
publicstatic void main(String[] args) {
//創(chuàng)建JSONArray
JSONArray jsonArray = new JSONArray();
//添加
jsonArray.add(0, "張三");
jsonArray.add(1, "123");
jsonArray.element("男");
System.out.println(jsonArray);
//根據(jù)下標(biāo)返回輸出
System.out.println(jsonArray.get(0));
//根據(jù)下標(biāo)設(shè)置新值,修改
jsonArray.set(0, "李四");
System.out.println(jsonArray);
//把JSONObject放入到JSONArray中
JSONObject jsonObject = new JSONObject();
jsonObject.put("username", "張三");
jsonObject.put("password", "123");
jsonArray.add(jsonObject);
System.out.println(jsonArray);
//循環(huán)輸出
for(inti = 0; i< jsonArray.size(); i++) {
System.out.println(jsonArray.get(i));
}
}
}
運(yùn)行結(jié)果:
JavaBean是一種Java語(yǔ)言寫成的可重用組件。
所謂javaBean,是指符合如下標(biāo)準(zhǔn)的Java類:
類是公共的
有一個(gè)無(wú)參的公共的構(gòu)造器
有屬性,且有對(duì)應(yīng)的get、set方法
用戶可以使用JavaBean將功能、處理、值、數(shù)據(jù)庫(kù)訪問和其他任何可以用Java代碼創(chuàng)造的對(duì)象進(jìn)行打包,并且其他的開發(fā)者可以通過內(nèi)部的JSP頁(yè)面、Servlet、其他JavaBean、applet程序或者應(yīng)用來(lái)使用這些對(duì)象。用戶可以認(rèn)為JavaBean提供了一種隨時(shí)隨地的復(fù)制和粘貼的功能,而不用關(guān)心任何改變。
JavaBean示例
public class JavaBean {
private String name; // 屬性一般定義為private
private int age;
public JavaBean() {
}
public int getAge() {
return age;
}
public void setAge(int a) {
age = a;
}
public String getName() {
return name;
}
public void setName(String n) {
name = n;
}
}
再繼續(xù)說(shuō)明JavaBean與json字符串互轉(zhuǎn)代碼:
student類:
public class Student {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Student(String username, String password) {
super();
this.username = username;
this.password = password;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Student [username=" + username + ", password=" + password + "]";
}
}
Demo 主類:
import net.sf.json.JSONObject;
public class Demo {
public static void main(String[] args) {
//定義對(duì)象
Student stu = new Student("張三", "123456");
//JavaBean對(duì)象轉(zhuǎn)json字符串
JSONObject jsonObject = JSONObject.fromObject(stu);
System.out.println(jsonObject);
//json字符串轉(zhuǎn)為javaBean
//定義json字符串
String jsondata = "{\"username\":\"李四\", \"password\":\"123\"}";
//轉(zhuǎn)為json對(duì)象
JSONObject json = JSONObject.fromObject(jsondata);
//轉(zhuǎn)為JavaBean對(duì)象
Student stu2 = (Student)JSONObject.toBean(json, Student.class);
System.out.println(stu2.toString());
}
}
運(yùn)行結(jié)果:
什么是集合:集合就是把具有相同屬性的東西放在一起,也可以是容器,把有關(guān)的東西都放進(jìn)去
什么是List:List是位于java.util下的一個(gè)接口,有序集合(也稱為序列)。此界面的用戶可以精確控制每個(gè)元素在列表中的插入位置。用戶可以通過整數(shù)索引(列表中的位置)訪問元素,并在列表中搜索元素
再繼續(xù)說(shuō)明List與json字符串互轉(zhuǎn)代碼:
student類:
與上述內(nèi)容一致
Demo 主類:
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) {
//定義list集合
List list = new ArrayList();
list.add(new Student("張三", "123"));
list.add(new Student("李四", "456"));
//list轉(zhuǎn)json字符串
JSONArray jsonArray = JSONArray.fromObject(list);
System.out.println(jsonArray);
//json字符串轉(zhuǎn)list
List list2 = new ArrayList();
String jsondata = "[{\"password\":\"123\",\"username\":\"張三\"},{\"password\":\"456\",\"username\":\"李四\"}]";
JSONArray jsonArray1 = JSONArray.fromObject(jsondata);
for(int i = 0; i< jsonArray1.size(); i++) {
JSONObject jsonObject2 = jsonArray1.getJSONObject(i);
Student stu2 = (Student)JSONObject.toBean(jsonObject2, Student.class);
list2.add(stu2);
}
System.out.println(list2);
}
}
運(yùn)行結(jié)果:
java中的map是一種依照鍵存儲(chǔ)元素的容器。在map中鍵可以是任意類型的對(duì)象。map中不能有重復(fù)的鍵,每個(gè)鍵都有一個(gè)對(duì)應(yīng)的值。
Map是一個(gè)集合,一種依照鍵(key)存儲(chǔ)元素的容器,鍵(key)很像下標(biāo),在List中下標(biāo)是整數(shù)。在Map中鍵(key)可以是任意類型的對(duì)象。Map中不能有重復(fù)的鍵(Key),每個(gè)鍵(key)都有一個(gè)對(duì)應(yīng)的值(value)。
一個(gè)鍵(key)和它對(duì)應(yīng)的值構(gòu)成map集合中的一個(gè)元素。
Map中的元素是兩個(gè)對(duì)象,一個(gè)對(duì)象作為鍵,一個(gè)對(duì)象作為值。鍵不可以重復(fù),但是值可以重復(fù)。
Map本身是一個(gè)接口,要使用Map需要通過子類進(jìn)行對(duì)象實(shí)例化。
在Map接口中有如下常用方法:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
Map map = new HashMap<>();
map.put(1, "A");
map.put(1, "A+");
map.put(2, "B");
map.put(3, "C");
System.out.println(map);
System.out.println(map.get(2)); //根據(jù)key取得value
System.out.println(map.get(10)); //找不到返回null
//取得Map中所有key信息
Set set = map.keySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
注意:
(1)、key值不允許重復(fù),如果重復(fù),則會(huì)把對(duì)應(yīng)value值更新;
(2)、key和value都允許為null,key為null有且只有一個(gè)。
HashMap原理:在數(shù)據(jù)量小的(JDK1.8后閾值為8)時(shí)候,HashMap是按照鏈表的模式存儲(chǔ)的;當(dāng)數(shù)據(jù)量變大之后,為了進(jìn)行快速查找,會(huì)將這個(gè)鏈表變?yōu)榧t黑樹(均衡二叉樹)來(lái)進(jìn)行保存,用hash來(lái)進(jìn)行查找。
再繼續(xù)說(shuō)明Map與json字符串互轉(zhuǎn)代碼:
student類:
與上述內(nèi)容一致
Demo 主類:
import net.sf.json.JSONObject;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
//定義map集合
Map map = new HashMap();
map.put("1", new Student("張三", "123"));
map.put("2", new Student("李四", "456"));
//Map轉(zhuǎn)json字符串
JSONObject jsonMap = JSONObject.fromObject(map);
System.out.println(jsonMap);
//定義字符串map集合
String jsondata = "{\"1\":{\"password\":\"123\",\"username\":\"張三\"},\"2\":{\"password\":\"456\",\"username\":\"李四\"}}";
//map集合字符串轉(zhuǎn)為map
Map map2 = (Map)JSONObject.fromObject(jsondata);
Set set = map2.keySet();
//定義迭代器,迭代輸出
Iterator ite = set.iterator();
while(ite.hasNext()) {
//取出一個(gè)字符串對(duì)象
String key = (String)ite.next();
//轉(zhuǎn)為json格式
JSONObject jsonObject = JSONObject.fromObject(map2.get(key));
//轉(zhuǎn)為對(duì)象
Student stu = (Student)JSONObject.toBean(jsonObject, Student.class);
System.out.println(key+" "+stu);
}
}
}
運(yùn)行結(jié)果:
代碼:
student類:
與上述內(nèi)容一致
Demo 主類:
import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Demo {
public static void main(String[] args) {
//定義list集合
Listlist = new ArrayList();
list.add(new Student("張三", "123"));
list.add(new Student("李四", "456"));
//List轉(zhuǎn)型JSONArray
JSONArray jsonArray = JSONArray.fromObject(list);
System.out.println(jsonArray.toString());
//JSONArray轉(zhuǎn)型List
Listlist2 = JSONArray.toList(jsonArray, new Student(), new JsonConfig());
Iteratorite = list2.iterator();
while(ite.hasNext()) {
Student stu = ite.next();
System.out.println(stu);
}
}
}
運(yùn)行結(jié)果:
代碼:
import net.sf.json.JSONArray;
public class Demo {
publicstatic void main(String[] args) {
//定義數(shù)組
boolean[] boolArray = {true, false, true};
//java數(shù)組轉(zhuǎn)JSONArray
JSONArray jsonArray = JSONArray.fromObject(boolArray);
System.out.println(jsonArray.toString());
//JSONArray轉(zhuǎn)java數(shù)組
Objectobj[] = jsonArray.toArray();
for(Object o : obj) {
System.out.print(o+"\t");
}
}
}
運(yùn)行結(jié)果:
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文題目:JSONObject詳解(net.sf.json-lib)-創(chuàng)新互聯(lián)
文章路徑:http://aaarwkj.com/article36/dohjsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、響應(yīng)式網(wǎng)站、網(wǎng)站改版、網(wǎng)站維護(hù)、關(guān)鍵詞優(yōu)化、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容