java學習——json的構建和解析
1、什麼是json
JSON(JavaScript Object Notation)是一種與開發語言無關的,輕量級的資料格式。json是由key和value組成:
{
"title" : "JSON入門-Java篇",
"author" : "Anthony",
"author" : ["JSON基礎","JSON常用處理方法介紹"],
“time” : {
“value” : 2017,
“unit” : “天”
}
}
從上面可以看出:
1)都是字典組成,左邊是key,右邊是value。
2)支援巢狀,記得多對到括號是成對出現,容易丟失一半。
3)除了最後一個元素,其他元素後面都加上逗號,這個容易丟失,寫錯。
4)value部分如果是字串,一定要用引號引用起來,如果是數字,直接寫數字就可以,當然,數字引用起來也可以,就當做是字串儲存。
2、JSON中資料型別
JSON中資料型別也分基本資料型別和資料結構型別
1)資料結構型別
上面例子中的大括號({})和中括號([]), 大括號表示是結構體型別(object),中括號表示是陣列型別(array)。
2)基本資料型別
有5中基本資料型別:string, number, true, false,null
注意在java中Number是個抽象類,它下面的有六個子類,屬於包裝類:Integer、Long、Byte、Double、Float、Short;
參看博文:https://blog.csdn.net/u013453970/article/details/47414553
其中,字串型別就是用雙引號包裹的,數字型別,直接寫數字就可以,如果數字用雙引號,就變成了字串。true和false是布林型,還有一種為空,用關鍵字null表示。
例子:利用資料型別來描述一個屌絲
{ “name” : “張三”, “age” : 24.5, “birthday" : "19xx-xx-xx", “school” : “藍翔技校”, “major” : ["理髮師", "挖掘機"], “car” : null, “has_hourse” : false, “has_girlfriend : false }
注意:為什麼上面寫那麼多文字來描述,哈哈,因為在json格式中,不支援寫註釋,所以,我用了那麼多文字來一一限定,實際上就是給下面JSON例子寫的註釋
3、用json.org來構建JSON資料並輸出
(1)在官網下載json.org.jar的jar包或者使用maven專案載入依賴包:
http://mvnrepository.com/artifact/org.json/json/20170516
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20170516</version>
</dependency>
下載的地方:
(2)上程式碼:
package script;
import org.json.JSONObject;
public class jsonDemo {
public static void example(){
Object nullObject = null;
JSONObject diaosi=new JSONObject();
diaosi.put("name","屌絲");
diaosi.put("age",25.5);
diaosi.put("birthday","1986-06-03");
diaosi.put("school","藍翔技校");
diaosi.put("major",new String[]{"理髮師","挖掘機"});
diaosi.put("car",false);
diaosi.put("has_girlfriend",false);
// // 使用nullObject跳過編譯器檢查
diaosi.put("hourse",nullObject);
System.out.println(diaosi.toString());
}
public static void main(String[] args){
example();
}
}
執行結果:
{"birthday":"1986-06-03","major":["理髮師","挖掘機"],"school":"藍翔技校","car":false,"name":"屌絲","has_girlfriend":false,"age":25.5}
結果中沒有hourse一項
4、用HashMap來構建JSON
(1)上程式碼:
package script;
import java.util.HashMap;
import java.util.Map;
public class jsonDemo1 {
public static void example(){
//Object nullObject = null;
Map diaosi=new HashMap();
diaosi.put("name","屌絲");
diaosi.put("age",25.5);
diaosi.put("birthday","1986-06-03");
diaosi.put("school","藍翔技校");
diaosi.put("major",new String[]{"理髮師","挖掘機"});
diaosi.put("car",false);
diaosi.put("has_girlfriend",false);
diaosi.put("hourse",null);
System.out.println(diaosi.toString());
}
public static void main(String[] args){
example();
}
}
結果:
{birthday=1986-06-03, major=[Ljava.lang.String;@1540e19d, school=藍翔技校, car=false, name=屌絲, has_girlfriend=false, hourse=null, age=25.5}
(2)上程式碼
package script;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class jsonDemo1 {
public static void example(){
Map<String,Object> diaosi=new HashMap<String,Object>();
diaosi.put("name","屌絲");
diaosi.put("age",25.5);
diaosi.put("birthday","1986-06-03");
diaosi.put("school","藍翔技校");
diaosi.put("major",new String[]{"理髮師","挖掘機"});
diaosi.put("car",false);
diaosi.put("has_girlfriend",false);
diaosi.put("hourse",null);
System.out.println(new JSONObject(diaosi).toString());
}
public static void main(String[] args){
example();
}
}
執行結果:裡面也沒有horse
{"birthday":"1986-06-03","major":["理髮師","挖掘機"],"school":"藍翔技校","car":false,"name":"屌絲","has_girlfriend":false,"age":25.5}
注意:這種和上面那種不一樣,上面只是一個HashMap物件
下面這個例子:diaosi先是一個HashMap物件,然後又把這個物件當做一個JSONObject物件來傳入,從而,有了toString的方法
5、用JavaBean來構建JSON
先構建JavaBean
package script;
public class DiaoSi {
private String name;
private String school;
private boolean has_girlfriend;
private double age;
private Object hourse;
private String[] major;
private String birthday;
public boolean isHas_girlfriend() {
return has_girlfriend;
}
public void setHas_girlfriend(boolean has_girlfriend) {
this.has_girlfriend = has_girlfriend;
}
public double getAge() {
return age;
}
public void setAge(double age) {
this.age = age;
}
public Object getHourse() {
return hourse;
}
public void setHourse(Object hourse) {
this.hourse = hourse;
}
public String[] getMajor() {
return major;
}
public void setMajor(String[] major) {
this.major = major;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getIgnore() {
return ignore;
}
public void setIgnore(String ignore) {
this.ignore = ignore;
}
private transient String ignore;
public String getName() {
return name;
}
public String getSchool() {
return school;
}
public void setName(String name){
this.name=name;
}
public void setSchool(String school){
this.school=school;
}
}
上面的get和set方法可以直接利用ide生成。
寫測試類:同一個包中不同類呼叫不用匯入
package script;
import org.json.JSONObject;
public class createJsonByBean {
public static void main(String[] args){
DiaoSi diaosi=new DiaoSi();
diaosi.setName("屌絲");
diaosi.setAge(25.5);
diaosi.setBirthday("1986-06-03");
diaosi.setSchool("藍翔技校");
diaosi.setMajor(new String[]{"理髮師","挖掘機"});
diaosi.setHas_girlfriend(false);
diaosi.setHourse(null);
System.out.println(new JSONObject(diaosi).toString());
}
}
執行結果:
{"birthday":"1986-06-03","major":["理髮師","挖掘機"],"school":"藍翔技校","name":"屌絲","has_girlfriend":false,"age":25.5}
6、對JSON資料進行解析操作
(1)建立一個test.json檔案
將上面執行結果複製到test.json檔案中,放在目錄下
(2)新增commons-io.jar依賴包
(3)上程式碼
package script;
import org.apache.commons.io.FileUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
public class ReadJson {
public static void main(String[] args) throws IOException {
File file=new File("./src/test/java/resourse/test.json");
String content= FileUtils.readFileToString(file,"utf8");
JSONObject jsonObject=new JSONObject(content);
System.out.println("姓名是:"+jsonObject.getString("name"));
System.out.println("年齡是:"+jsonObject.getDouble("age"));
//把json陣列物件轉換成Java的陣列物件
JSONArray jsonarray=jsonObject.getJSONArray("major");
for(int i=0;i<jsonarray.length();i++){
System.out.println("專業-"+(i+1)+":"+jsonarray.get(i));
}
}
}
執行結果:
姓名是:屌絲
年齡是:25.5
專業-1:理髮師
專業-2:挖掘機