1. 程式人生 > >java學習——json的構建和解析

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:挖掘機