大白話攻略之JSON篇

先看百度百科的定義:

JSON (JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數(shù)據(jù)交換格式掂榔。它基于 ECMAScript (歐洲計算機協(xié)會制定的js規(guī)范)的一個子集狞甚,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)捌蚊。簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言葵袭。 易于人閱讀和編寫蛙酪,同時也易于機器解析和生成缭付,并有效地提升網(wǎng)絡(luò)傳輸效率拆火。

說實話,在第一次看到這段描述的時候宜猜,我根本不知道它想表達(dá)什么泼返,啥是JSON啊,心里完全沒譜姨拥。

本質(zhì)上來說绅喉,JSON就是一個字符串,一個字符串叫乌,一個字符串柴罐!它將變量以字符串的形式進(jìn)行傳遞。

先來講講在一般情況下憨奸,我們怎么傳遞變量革屠,現(xiàn)在假設(shè)我們有三個變量: A=1,B=2,C=3 似芝,那我們在代碼里如何傳遞這3個變量呢那婉,(你可能會納悶:這也算是個問題?)

比如:

let A=1
let B=2
let C=3

Function TEST(P1, P2,  P3) {
    Console.log (P1, P2, P2) 
}

TEST(A, B, C) //打拥澄汀:123

我們直接將A,B,C作為TEST函數(shù)的參數(shù)傳進(jìn)去完事兒详炬,很簡單對吧。

但是寞奸,如果代碼不是用同一種語言寫成的又怎么整呛谜?

比如瀏覽器端(俗稱前端)用Javascript語言,服務(wù)器用PHP或者Java或者Golang寫成枪萄,你怎么把Javascript的一個變量直接傳遞給例如用Golang寫的某個函數(shù)呢隐岛?哈哈,開始撓頭了吧瓷翻。

這時候礼仗,JSON登場了,它的初始定義非常簡單逻悠,就是把各種變量揉在一起變成一個長字符串,

比如A=1, B=2, C=3韭脊,JSON將它串在一起變成這樣:

“{'a': 1,'b': 2,'c': 3}”

這樣童谒,利用傳遞單一字符串的方式,變相地將3個變量都傳遞走了沪羔,對機器而言饥伊,瀏覽器里運行的Javascript只是向后端的服務(wù)器傳遞了一個字符串,不管你后端運行的軟件是什么語言寫成蔫饰,字符串總是可以接收的琅豆,因此迂回地解決了前后端變量交換問題。當(dāng)然篓吁,JSON并非只能用在瀏覽器/服務(wù)器茫因,任何沒辦法直接傳遞變量又需要進(jìn)行數(shù)據(jù)交換的場合,都可以使用JSON杖剪。


1. Javascript 使用JSON

  1. 將變量打包成JSON字符串

    在JS下使用JSON超級簡單冻押,還是用上面的例子:

        let data = {
            a:1,
            b:2,
            c:3
        }
        let json = JSON.stringify(data)
        console.log(json) //輸出 {"a":1,"b":2,"c":3} 這個字符串
    

    然后你通過http也好,ajax也好盛嘿,把json這個字符串傳遞到后端服務(wù)器即可洛巢。

  1. 將JSON字符串還原為變量

    也就是上例的逆操作,可以這樣:

            let json = '{"a":1,"b":2,"c":3}' //假設(shè)這串字符串是服務(wù)器發(fā)過來的
            let data = JSON.parse(json)
            console.log(data.a) //輸出:1
    
  2. 總結(jié):

    JS對象 轉(zhuǎn) JSON字符串:用 JSON.stringify (JS對象)

    JSON字符串 轉(zhuǎn) JS對象:用 JSON.parse (json字符串)


2. Golang使用JSON

  1. JSON字符串轉(zhuǎn)變量:

    方法1:預(yù)先創(chuàng)建結(jié)構(gòu)體來保存從JSON字符串解析過來的數(shù)據(jù)

     import "encoding/json" //首先引用json包
    
     type Data struct {
             A string //注意次兆,在定義結(jié)構(gòu)體的時候稿茉,成員首字母一定要是大寫,否則json包無法訪問
             B string
             C string
     }
    
     var data Data
     strJson :=  `{"a": "1","b": "2", "c":"3"}`
     json.Unmarshal([]byte(strJson), &data) //&符號是取址的意思
     fmt.Printf(data.A) //輸出:1
    

    延展閱讀:

    Golang中根據(jù)首字母的大小寫來確定可以訪問的權(quán)限。無論是方法名漓库、常量恃慧、變量名還是結(jié)構(gòu)體的名稱,如果首字母大寫米苹,則可以被其他的包訪問糕伐;如果首字母小寫,則只能在本包中使用蘸嘶,可以簡單的理解成良瞧,首字母大寫是公有的,首字母小寫是私有的训唱。

    方法2:不創(chuàng)建結(jié)構(gòu)體直接保存數(shù)據(jù)

     import "encoding/json"
    
     var data map[string]interface{} 
    
     strJson := `{"a": "1","b": "2", "c":"3"}`
     json.Unmarshal([]byte(strJson), &data)
    
     result := data["a"]
     fmt.Println(result) //輸出:1
    

  2. 變量轉(zhuǎn)成JSON字符串

     data := map[string]interface{}{
         "a": "1",
         "b": "2",
         "c": "3",
     }
    
     strJson, _ := json.Marshal(data)
     fmt.Println(string(strJson)) //輸出:{"a":"1","b":"2","c":"3"}
    
  3. 總結(jié)

    JSON字符串轉(zhuǎn)變量 : 用 json.Unmarshal([]byte(JSON字符串), &變量名)

    變量轉(zhuǎn)成JSON字符串:用JSON字符串, _ := json.Marshal(變量名)


JSON入門內(nèi)容就講到這褥蚯,當(dāng)然,在真實的環(huán)境中况增,JSON在使用細(xì)節(jié)上不會這么簡單赞庶,但請記住它的本質(zhì),無非是利用字符串方式解決各種平臺之間的數(shù)據(jù)交換的問題澳骤,不用將它想得過于復(fù)雜歧强。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市为肮,隨后出現(xiàn)的幾起案子摊册,更是在濱河造成了極大的恐慌,老刑警劉巖颊艳,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茅特,死亡現(xiàn)場離奇詭異,居然都是意外死亡棋枕,警方通過查閱死者的電腦和手機白修,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來重斑,“玉大人兵睛,你說我怎么就攤上這事】耍” “怎么了卤恳?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寒矿。 經(jīng)常有香客問我突琳,道長,這世上最難降的妖魔是什么符相? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任拆融,我火速辦了婚禮蠢琳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘镜豹。我一直安慰自己傲须,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布趟脂。 她就那樣靜靜地躺著泰讽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昔期。 梳的紋絲不亂的頭發(fā)上已卸,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音硼一,去河邊找鬼累澡。 笑死,一個胖子當(dāng)著我的面吹牛般贼,可吹牛的內(nèi)容都是我干的愧哟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼哼蛆,長吁一口氣:“原來是場噩夢啊……” “哼蕊梧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腮介,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤望几,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后萤厅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡靴迫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年惕味,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玉锌。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡名挥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出主守,到底是詐尸還是另有隱情禀倔,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布参淫,位于F島的核電站救湖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏涎才。R本人自食惡果不足惜鞋既,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一力九、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧邑闺,春花似錦跌前、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至靶衍,卻和暖如春灾炭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摊灭。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工咆贬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帚呼。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓掏缎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親煤杀。 傳聞我的和親對象是個殘疾皇子眷蜈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容