理解JSON

★有大神言:從結構上看,所有的數(shù)據(jù)(data)最終都可以分解成三種類型:
第一種類型是標量(scalar),也就是一個單獨的字符串(string)或數(shù)字(numbers),比如"北京"這個單獨的詞。
第二種類型是序列(sequence),也就是若干個相關的數(shù)據(jù)按照一定順序并列在一起,又叫做數(shù)組(array)或列表(List),比如"北京,上海"。
第三種類型是映射(mapping),也就是一個名/值對(Name/value),即數(shù)據(jù)有一個名稱,還有一個與之相對應的值,這又稱作散列(hash)或字典(dictionary),比如"首都:北京"。
★JavaScript Object Notation即為JSON,JavaScript對象表示法。
★一種與開發(fā)語言無關的,輕量級的數(shù)據(jù)格式。
★易讀易編寫,易于程序解析與生產(chǎn)。
★{ }表示對象,[ ]表示數(shù)組array
★使用key-value的形式存儲數(shù)據(jù),類似java中的
Map<String,Object>數(shù)據(jù)結構。
★key必須為字符串,value可以是數(shù)字(整數(shù)或浮點數(shù)),字符串(在雙引號中),邏輯值(true 或 false),數(shù)組([ ]包圍),對象({ }包圍),null等。
★一個好用的json解析網(wǎng)址:json.cn

★幾乎每種語言都有支持JSON的api,java同樣支持。JSONObject對應json的對象,JSONArray對應json的array。

import java.util.HashMap;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class JsonTest {
    //JSON是一種與開發(fā)語言無關的,輕量級的數(shù)據(jù)格式。全稱:JavaScript Object Notation
    //易讀易編寫,易于程序解析與生產(chǎn)
    //key : value存儲方式,key為字符串,value可為string,number,true,false,null等數(shù)據(jù)結構或數(shù)據(jù)結構
    //{}表示對象,[]表示數(shù)組array
    //json解析網(wǎng)址:json.cn
    public static void main(String...args){
        //標準的json里面是沒有注釋的
        
        //一個簡單json例子
        String aPersonJson = "                                  "
                + "          {                                  "
                + "            'name' : '王小二',                 "
                + "            'age' : 25,                      "
                + "            'birthday' : '1990-01-01',       "
                + "            'school' : '藍翔',                "
                + "            'major' : ['理發(fā)','發(fā)掘機'],        "
                + "            'hasGirlfriend' : false,         "
                + "            'car' : {                        "
                + "                 'name' : 'BMW',             "
                + "                 'price' : 500000            "
                + "             },                              "
                + "            'house' : null                   "
                + "          }                                  ";
        
        JSONObject jo = new JSONObject();
        jo = JSONObject.fromObject(aPersonJson);
        //添加項
        jo.put("idol", "btp");
        Object name = jo.get("name");
        Object car = jo.get("car");
        Object major = jo.get("major");
        
        System.out.println(name);//輸出:王小二
        System.out.println(car);//輸出:{"name":"BMW","price":500000}
        //major的類型是JSONArray
        System.out.println(major.getClass().getSimpleName());//輸出:JSONArray
        //car的類型是JSONObject
        System.out.println(car.getClass().getSimpleName());//輸出:JSONObject
        
        //輸出:
        //{"name":"王小二","age":25,"birthday":"1990-01-01","school":"藍翔","major":["理發(fā)","發(fā)掘機"],"hasGirlfriend":false,"car":{"name":"BMW","price":500000},"house":null,"idol":"btp"}
        System.out.println(jo);
        
        System.out.println("-------------------------------分割線------------------------------------------");
        
        
        //也可以使用put來構建json
        JSONObject xiaomi6 = new JSONObject();
        xiaomi6.put("名字", "小米6");
        xiaomi6.put("價格", 2499);
        xiaomi6.put("主屏尺寸", "5.15英寸");
        xiaomi6.put("主屏分辨率", "1920 x 1080像素");
        xiaomi6.put("電池容量", "3350mAh");
        JSONArray camera = new JSONArray();
        JSONObject backCamera = new JSONObject();
        backCamera.put("主", "1200萬像素");
        backCamera.put("副", "1200萬像素");
        camera.add(backCamera);
        camera.add("800萬像素");
        xiaomi6.put("攝像頭", camera);
        JSONArray competitor = new JSONArray();
        competitor.add("samsung S8");
        competitor.add("huawei P10");
        competitor.add("Iphone7 red");
        xiaomi6.put("友商", competitor);
        
        Map<String,Object> leijunMap = new HashMap<String,Object>();
        leijunMap.put("姓名", "Mr.雷");
        leijunMap.put("年齡", 48);
        leijunMap.put("職位", new String[]{"小米總裁","流行音樂引導者","小米之家創(chuàng)始人"});
        leijunMap.put("愛好", "Are you OK?");
        
        //JSONObject leijunOB = JSONObject.fromObject(leijunMap);
        xiaomi6.put("promulgator", leijunMap);
        System.out.println(xiaomi6);
        //格式化xiaomi6
        /*
        {
            "名字": "小米6",
            "價格": 2499,
            "主屏尺寸": "5.15英寸",
            "主屏分辨率": "1920 x 1080像素",
            "電池容量": "3350mAh",
            "攝像頭": [
                {
                    "主": "1200萬像素",
                    "副": "1200萬像素"
                },
                "800萬像素"
            ],
            "友商": [
                "samsung S8",
                "huawei P10",
                "Iphone7 red"
            ],
            "promulgator": {
                "姓名": "Mr.雷",
                "愛好": "Are you OK?",
                "年齡": 48,
                "職位": [
                    "小米總裁",
                    "流行音樂引導者",
                    "小米之家創(chuàng)始人"
                ]
            }
        }
        */
        
        //net.sf.json對json和bean相互轉化不大友好,Gson在bean和json轉化方面做得更為出色
    }
}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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