Golang——json資料處理

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

今天讓官方文檔虐了幾條街。

需要能夠對JSON資料進行編碼,將內部的中文字串轉成Unicode編碼。編碼這種東西接觸也不少了,隨便搜一下就能解決。果斷去搜了一下。本文所有編碼

rs := []rune("golang中文unicode編碼")j := ""html := ""for _, r := range rs {rint := int(r)if rint < 128 {j += string(r)html += string(r)} else {j += "\\u" + strconv.FormatInt(int64(rint), 16) // jsonhtml += "&#" + strconv.Itoa(int(r)) + ";"       // 網頁}}fmt.Printf("JSON: %s\n", j)fmt.Printf("HTML: %s\n", html)

Golang裡面,所有UTF8字串裡的單個字元,可以使用byte類型表示,經過[]byte(str)轉換成數組之後,就能進行遍曆擷取。而對於Unicode,Golang提供了另一種資料類型rune,經過[]rune(str)轉換之後,就能擷取單個Unicode字元。對於英文字元以及英文標點,Unicode編碼不變,而中文編碼,轉成16進位即可。

我們一般認為:UTF-16就是Unicode,以16位兩位元組為單位,最少為兩位元組,最多4個位元組。

所以,一般情況下,轉出的Unicode是4個16進位數字(2位元組)組成。最後,為其追加\u頭即可完成。

寫完之後,就準備這麼轉了。結構體資料拼接完之後,把有中文的項單獨編碼一下。現在想想,寫入程式碼太渣了。

看看官方文檔的說法:

Marshal traverses the value v recursively. If an encountered value implements the Marshaler interface and is not a nil pointer, Marshal calls its MarshalJSON method to produce JSON. The nil pointer exception is not strictly necessary but mimics a similar, necessary exception in the behavior of UnmarshalJSON.

調用json.Marshal方法之後,會遞迴的訪問傳入的結構體的每個項,如果遍曆到的項實現了Marshaler的方法,並且該項不是null 指標,將會自動調用實現的MarshalJSON方法。

type QuoteString struct {QString string}func (q QuoteString) MarshalJSON() ([]byte, error) {return []byte(strconv.QuoteToASCII(q.QString)), nil}type ColorGroup struct {ID     int         `json:"id,string"`Name   QuoteString `json:"name"`Colors []string}

上面定義了一個結構體QuoteString,它實現了Marshaler,所以會自動進行Unicode編碼。轉碼,用了strconv包裡的函數QuoteToASCII。這個方法應該是我上面提供的升級版。

源碼很重要。

######參考文獻+ 【1】Package json - The Go Programming Language+ 【2】golang中文unicode編碼 - 豆蔻+ 【3】Package strconv - The Go Programming Language

原文連結:Golang——json資料處理,轉載請註明來源!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.