Go_14:GoLang中 json、map、struct 之間的相互轉化

來源:互聯網
上載者:User

標籤:訪問   port   沒有   lang   family   tag   ack   類型   map   

1. golang 中 json 轉 struct

  <1. 使用 json.Unmarshal 時,結構體的每一項必須是匯出項(import field)。也就是說結構體的 key 對應的首字母必須為大寫。請看下面的例子:

package commontestimport (    "testing"    "encoding/json")type Person struct {    name string    age int}func TestStruct2Json(t *testing.T) {    jsonStr := `    {        "name":"liangyongxing",        "age":12    }    `    var person Person    json.Unmarshal([]byte(jsonStr), &person)    t.Log(person)}

輸出的結果如下:

{ 0}

   從結果可以看出,json 資料並沒有寫入 Person 結構體中。結構體 key 首字母大寫的話就可以,修改後:

package commontestimport (    "testing"    "encoding/json")type Person struct {    Name string    Age int}func TestStruct2Json(t *testing.T) {    jsonStr := `    {        "name":"liangyongxing",        "age":12    }    `    var person Person    json.Unmarshal([]byte(jsonStr), &person)    t.Log(person)}

列印結果如下:

{liangyongxing 12}

   從以上結果我們可以發現一個很重要的資訊,json 裡面的 key 和 struct 裡面的 key 一個是小寫一個是大寫,即兩者大小寫並沒有對上。從這裡我們就可以得出一個結論,要想能夠附上值需要結構體中的變數名首字母大寫,而在轉換的 json 串中大小寫都可以,即在 json 傳中欄位名稱大小寫不敏感。那麼經過驗證發現,在 json 中如果寫成如下方式:

jsonStr := `    {        "NaMe":"liangyongxing",        "agE":12    }    `

  最終結果仍然是有值的,那麼就驗證了我們上面的結論,json 串中對欄位名大小寫不敏感(不一定是首字母,這點需要注意)

  <2. 在結構體中是可以引入 tag 標籤的,這樣在匹配的時候 json 串對應的欄位名需要與 tag 標籤中定義的欄位名匹配,當然在 tag 中定義的名稱就不需要首字母大寫了,且對應的 json 串中欄位名稱仍然大小寫不敏感,和上面的結論一致。(注意:此時結構體中對應的欄位名可以不用和匹配的一致,但是也必須首字母大寫,只有大寫的才是可對外提供訪問的)

package commontestimport (    "testing"    "encoding/json")//這裡對應的 N 和 A 不能為小寫,首字母必須為大寫,這樣才可對外提供訪問,具體 json 匹配是通過後面的 tag 標籤進行匹配的,與 N 和 A 沒有關係//tag 標籤中 json 後面跟著的是欄位名稱,都是字串類型,要求必須加上雙引號,否則 golang 是無法識別它的類型type Person struct {    N string     `json:"name"`    A int        `json:"age"`}func TestStruct2Json(t *testing.T) {    jsonStr := `    {        "name":"liangyongxing",        "age":12    }    `    var person Person    json.Unmarshal([]byte(jsonStr), &person)    t.Log(person)}

這樣輸出的結果如下:

{liangyongxing 12}

   當然,你也可以再做一個實驗,驗證 tag 標籤中對應的欄位名稱大小寫不敏感,這裡就不做冗餘介紹了。

2. golang 中 struct 轉 json 串

  持續總結中

 

Go_14:GoLang中 json、map、struct 之間的相互轉化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.