當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Go语言编程—Go语言中JSON的处理(map、struct 和 JSON字符串的相互转换)
生活随笔
收集整理的這篇文章主要介紹了
Go语言编程—Go语言中JSON的处理(map、struct 和 JSON字符串的相互转换)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
JSON的簡單介紹
JSON (JavaScript Object Notation)是一種比XML更輕量級的數(shù)據(jù)交換格式,在易于人們閱讀和編寫的同時,也易于程序解析和生成。盡管JSON是JavaScript的一個子集,但JSON采用完全獨立于編程語言的文本格式,且表現(xiàn)為鍵/值對集合的文本描述形式(類似一些編程語言中的字典結構),這使它成為較為理想的、跨平臺、跨語言的數(shù)據(jù)交換語言。正是由于是鍵值對形式,那么很好的和Go語言中的struct 和 map對應。
代碼示例
在下面代碼中struct->json,map->json,json->struct,json->map
package mainimport ("encoding/json""fmt" )type Student struct {Name string `json:"-"` //對應的json的可以也是大寫,可以指定json的二次編碼 ,-不會輸出到jsonAge int `json:"age,string"` //輸出為字符串Sex byte `json:"性別"` //會轉(zhuǎn)出數(shù)字!怎么轉(zhuǎn)出字符?Is boolLike []stringAddr string }//結構體->json func structToJson() {//轉(zhuǎn)換從json的字段必須首字母大寫stu := Student{"Laymond", 18, 'm', true, []string{"跑步", "爬山", "學習"}, "中國.重慶"}//json_byte, err := json.Marshal(stu)json_byte, err := json.MarshalIndent(stu, "", " ") //看上去更加格式化if err != nil {fmt.Println("json.Marshal error")return}fmt.Println(string(json_byte))}//map->json func mapToJson() {stu := make(map[string]interface{}, 6)stu["name"] = "Laymond"stu["age"] = 18stu["sex"] = 'm'stu["is"] = truestu["like"] = []string{"看書", "學習"}stu["addr"] = "中國.重慶"//json_byte, err := json.Marshal(stu)json_byte, err := json.MarshalIndent(stu, "", " ") //看上去更加格式化if err != nil {fmt.Println("json.Marshal error")return}//當然map是無序fmt.Println(string(json_byte)) }//json字符串->struct func jsonToStruct() {// 要結構體一一對應,尤其是json二次編碼格式str := `{"age": "18","性別": 109,"Is": true,"Like": ["跑步","爬山","學習"],"Addr": "中國.重慶"}`var stu Studentjson.Unmarshal([]byte(str), &stu)fmt.Println(stu) }//json字符串->map func jsonToMap() {str := `{"age": 18,"sex": 109,"Is": true,"like": ["跑步","爬山","學習"],"Addr": "中國.重慶"}`stu := make(map[string]interface{}, 10)json.Unmarshal([]byte(str), &stu)fmt.Println(stu)//可以用對應的value類型賦值嗎?不可以 接口類型不可以轉(zhuǎn) 其他類型,只能通過類型斷言var name interface{} = "Laymond"// var name_str string = string(name) //errorvar name_str string//斷言只能用在if 和 switch ,下面是指定類型斷言if data, ok := name.(string); ok == true {name_str = datafmt.Println(name_str)}var stu_str string//var a_int, b_int intfor key, value := range stu {switch data := value.(type) {//int和byte類型匹配不到 或許int 類型太多了,不好匹配?case int8:fmt.Printf("key = %v ,%v is int\n", key, data)case byte:fmt.Printf("key = %v ,%v is byte\n", key, data)case string:stu_str = datafmt.Printf("key = %v ,%v is string\n", key, data)case bool:fmt.Printf("key = %v ,%v is bool\n", key, data)case []interface{}:fmt.Printf("key = %v ,%v is interface\n", key, data)}}fmt.Println(stu_str) }func main() {fmt.Println("---------struct-> json---------")structToJson()fmt.Println("---------map-> json------------")mapToJson()fmt.Println("---------json -> struct-------")jsonToStruct()fmt.Println("---------json -> map----------")jsonToMap() }運行結果
總結
以上是生活随笔為你收集整理的Go语言编程—Go语言中JSON的处理(map、struct 和 JSON字符串的相互转换)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6.IDA-重命名、注释
- 下一篇: wireshark全网过虑最全规则