大白話攻略之JSON篇

先看百度百科的定義:

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

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

本質上來說,JSON就是一個字符串,一個字符串,一個字符串!它將變量以字符串的形式進行傳遞。

先來講講在一般情況下,我們怎么傳遞變量,現(xiàn)在假設我們有三個變量: 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) //打?。?23

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

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

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

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

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

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

這樣,利用傳遞單一字符串的方式,變相地將3個變量都傳遞走了,對機器而言,瀏覽器里運行的Javascript只是向后端的服務器傳遞了一個字符串,不管你后端運行的軟件是什么語言寫成,字符串總是可以接收的,因此迂回地解決了前后端變量交換問題。當然,JSON并非只能用在瀏覽器/服務器,任何沒辦法直接傳遞變量又需要進行數(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這個字符串傳遞到后端服務器即可。

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

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

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

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

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


2. Golang使用JSON

  1. JSON字符串轉變量:

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

     import "encoding/json" //首先引用json包
    
     type Data struct {
             A string //注意,在定義結構體的時候,成員首字母一定要是大寫,否則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ù)首字母的大小寫來確定可以訪問的權限。無論是方法名、常量、變量名還是結構體的名稱,如果首字母大寫,則可以被其他的包訪問;如果首字母小寫,則只能在本包中使用,可以簡單的理解成,首字母大寫是公有的,首字母小寫是私有的。

    方法2:不創(chuàng)建結構體直接保存數(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. 變量轉成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. 總結

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

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


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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容