Json與Gson

JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換語(yǔ)言,以文字為基礎(chǔ),且易于讓人閱讀,同時(shí)也方便了機(jī)器進(jìn)行解析和生成。JSON簡(jiǎn)單說(shuō)就是javascript中的對(duì)象和數(shù)組,所以這兩種結(jié)構(gòu)就是對(duì)象和數(shù)組兩種結(jié)構(gòu),通過(guò)這兩種結(jié)構(gòu)可以表示各種復(fù)雜的結(jié)構(gòu),其可以將JavaScript 對(duì)象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個(gè)字符串,或者在異步應(yīng)用程序中將字符串從Web客戶(hù)機(jī)傳遞給服務(wù)器端程序。JSON采用完全獨(dú)立于程序語(yǔ)言的文本格式,但是也使用了類(lèi)C語(yǔ)言的習(xí)慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。

Json有兩種數(shù)據(jù)結(jié)構(gòu):數(shù)組和對(duì)象

對(duì)象:是指用{}中間的內(nèi)容,其形式為{key:value,key1:value1,key2:value2}

k#ey為對(duì)象的屬性,而value為對(duì)象的屬性值,通過(guò)對(duì)應(yīng)的key值來(lái)取出對(duì)應(yīng)的value值

數(shù)組:是指用[]中間的內(nèi)容,其形式為["java","javascript",servlet],跟java,c,c++等語(yǔ)言一樣的數(shù)組
可以通過(guò)下標(biāo),索引來(lái)取出對(duì)應(yīng)的值

下面介紹Json與Gson的使用方法
首先我們先導(dǎo)入我們所需的包: (http://pan.baidu.com/s/1eSJ4mBK) 密碼:6j47

搜狗截圖17年07月27日0929_1.png

**Json的值也就是上面所說(shuō)的value值,它有幾種類(lèi)型,數(shù)字(包括整形和浮點(diǎn)型),字符串,邏輯值,數(shù)組,對(duì)象,null,它們可以直接使用,對(duì)應(yīng)相應(yīng)的key **

直接使用JSONObject對(duì)象

    /**
     * 直接使用JSONObject對(duì)象
     */
    private static void JSONObject()
    {
        Object nullObj=null;
        //創(chuàng)建一個(gè)JSONObject對(duì)象
        JSONObject jsonObject=new JSONObject();  //很類(lèi)似于Map<String,Object>,后面講到
        jsonObject.put("name","小明");
       //使用浮點(diǎn)型
        jsonObject.put("age",25.2);
      //json沒(méi)有Data類(lèi)型
        jsonObject.put("birthday","1990-10-01");
        jsonObject.put("school","藍(lán)翔");
     //數(shù)組類(lèi)型
        jsonObject.put("major",new String[]{"挖掘機(jī)"});
        jsonObject.put("house", nullObj);
        System.out.println(jsonObject);
    }

其結(jié)果為


搜狗截圖17年07月27日0944_2.png

通過(guò)Map來(lái)使用json

    /**
     * 通過(guò)Map來(lái)使用json
     */
    private static void createJsonByMap()
    {
        //創(chuàng)建一個(gè)Map對(duì)象
        Map<String,Object> jsonObjectMap=new HashMap<String,Object>();
        jsonObjectMap.put("name","王小二");
        jsonObjectMap.put("age",25.2);
        jsonObjectMap.put("birthday","1990-10-01");
        jsonObjectMap.put("school","藍(lán)翔");
        jsonObjectMap.put("major",new String[]{"理發(fā)","挖掘機(jī)"});
        jsonObjectMap.put("house", null);
        System.out.println(new JSONObject(jsonObjectMap));
    }
搜狗截圖17年07月27日0946_3.png

下面推薦使用這種方法來(lái)使用json

/**
     * 這個(gè)是通過(guò)bean的形式來(lái)使用json
     */
    private static void createJsonByBean()
    {
        
        JSONObject jsonObject =new JSONObject();
        //定義一個(gè)bean
        Person person=new Person();
        //調(diào)用set方法
        person.setId("1");
        person.setName("王小二");
        person.setAge("18");
        person.setSex("男");
        //通過(guò)這個(gè)方法來(lái)使bean成為JSONObject對(duì)象
        JSONObject j1=jsonObject.fromObject(person);
        //判斷是否為空
        if(!j1.isEmpty())
        {
            System.out.println(j1);
        }

    }

JSON也可以通過(guò)文件來(lái)讀取里面的jSON數(shù)據(jù)

public static void main(String[] args) throws IOException
    {
    public static void main(String[] args) throws IOException 
      {
        //從文件中讀取json數(shù)據(jù)
        File file=new File(ReadGson.class.getResource("/Json/wangxiaoer.json").getFile());
        String content=FileUtils.readFileToString(file);
        //解析成一個(gè)json對(duì)象
        JSONObject jsonObject=new JSONObject(content);
        //找到一個(gè)名為name的key
        System.out.println(jsonObject.getString("name"));
      }
    }

JSON到這里就結(jié)束了

接下來(lái)是介紹Gson的使用:(Gson可以將下面四種數(shù)據(jù)類(lèi)型轉(zhuǎn)換成json字符串)

類(lèi)型一:JavaBean

類(lèi)型二:List<JavaBean>

類(lèi)型三:List<String>

類(lèi)型四:List<Map<String,Object>>

private static void createGSON()
    {
        /**
         * List<javabean>對(duì)象轉(zhuǎn)換json字符串
         * 將json字符串解析成List<javabean>對(duì)象
         */
        //創(chuàng)建一個(gè)bean對(duì)象
        Person person=new Person();
        person.setId("1");  
        person.setName("王小二");
        person.setAge("18");
        person.setSex("男");
        person.setMajor(new String[]{"理發(fā)","挖掘機(jī)"});
        //創(chuàng)建一個(gè)Gson
        Gson gson=new Gson();
        //將一個(gè)javabean轉(zhuǎn)換成json字符串
        String jsonString=gson.toJson(person);
        System.out.println("Json字符串:"+jsonString);
        //將json字符串轉(zhuǎn)換成javabean
        person=gson.fromJson(jsonString, Person.class);
        System.out.println("bean:"+person.toString());
        System.out.println();
        
        /**
         * List<String>對(duì)象轉(zhuǎn)換json字符串
         * 將json字符串解析成List<String>對(duì)象
         */
        List<String> list=new ArrayList<String>();
        list.add("gson1");
        list.add("json2");
        list.add("json3");
        //將List<String>對(duì)象轉(zhuǎn)換成json字符串
        jsonString=gson.toJson(list);
        System.out.println("Json字符串:"+jsonString);
        //將json字符串轉(zhuǎn)換成List<String>
        List<String> list2=gson.fromJson(jsonString,list.getClass());
        System.out.println("List<String>:"+list);
        System.out.println();

        /**
         * 將List<Map<String,Object>>對(duì)象轉(zhuǎn)換成json
         * 將json字符串解析成List<Map<String,Object>對(duì)象
         */
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        //將Map<String,Object>對(duì)象轉(zhuǎn)換成json字符串
        jsonString=gson.toJson(map);
        System.out.println("Json字符串:"+jsonString);
        //將json字符串轉(zhuǎn)換成Map<String,Object>
        Map<String,Object> map2=gson.fromJson(jsonString,map.getClass());
        System.out.println("List<Map<String,Object>:"+map2);
    }
搜狗截圖17年07月27日1007_4.png

Gson也能讀取JSON文件下的json字符串

public static void main(String[] args) throws IOException
    {
        //從文件中讀取json數(shù)據(jù)
        File file=new File(ReadGson.class.getResource("/Json/wangxiaoer.json").getFile());
        String content=FileUtils.readFileToString(file);
        Gson gson=new Gson();
        //JSON只能解析成它自己的Oject對(duì)象
        //GSON能解析成自己的Oject對(duì)象
        //正向生成的對(duì)象與反向解析的對(duì)象是一樣的話(huà),可以確保兩個(gè)對(duì)象是一致的
        Person person=gson.fromJson(content,Person.class);
        System.out.println(person.toString());
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容