一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - Golang 如何解析和生成json

Golang 如何解析和生成json

2020-09-05 10:56Dabelv Golang

這篇文章主要介紹了Golang 如何解析和生成json,幫助大家更好的理解和學習golang,感興趣的朋友可以了解下

JSON(Javascript Object Notation)是一種輕量級的數據交換語言,以文字為基礎,具有自我描述性且易于讓人閱讀。盡管JSON是JavaScript的一個子集,但JSON是獨立于語言的文本格式,并且采用了類似于C語言家族的一些習慣。JSON與XML最大的不同在于XML是一個完整的標記語言,而JSON不是。JSON由于比XML更小、更快,更易解析,以及瀏覽器的內建快速解析支持,使得其更適用于網絡數據傳輸領域。

Golang自帶的JSON解析庫encoding/json,可以用起將結構化數據序列化成json字符串或從json字符串中解析出我們想要的數據。

1.解析json

給一個較為復雜的json字符串,包含數組,數組的元素是json對象。我們需要取出數組第一個元素中的某一個字段值。其它的解析均可參考下面的代碼。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main
 
import (
  "encoding/json"
  "fmt"
)
 
func main() {
    jsonStr := []byte(`{"uin":1589276509,"feedID":10000,"videos":[{"picture":"http://qqpublic.qpic.cn/avatar.jpg","duration":"839"}]}`)
    var jsonMap map[string]interface{}
    if err := json.Unmarshal(jsonStr, &jsonMap); err!=nil {
      fmt.Printf("json decode failed, err=%v", err)
      return
    }
    value, ok:=jsonMap["videos"]
    fmt.Printf("value=%#v\n", value)
    if ok {
        sliceValue, ok := value.([]interface{})
        if ok {
            mapValue, ok := sliceValue[0].(map[string]interface{})
            if ok {
                duration, ok := mapValue["duration"]
                if ok {
                    fmt.Printf("d=%v,type=%T\n",duration,duration)
                }
            }
        }
    }
}

程序輸出:

value=[]interface {}{map[string]interface {}{"picture":"http://qqpublic.qpic.cn/avatar.jpg", "duration":"839"}}
d=839,type=string

解析json字符串時,需要注意如下幾點:
(1)Go類型和JSON類型的對應關系如下:

map[string]interface{}代表JSON對象
[]interface{}代表JSON數組
bool代表JSON booleans
float64代表JSON numbers
string代表JSON strings
nil 代表JSON null

2.生成json

假設我們有如下一個類(結構體)student 及其一個實例對象st,將其序列化為json,具體實現如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package main
 
import (
  "encoding/json"
  "fmt"
)
 
type Stu struct {
  Name string `json:"name"`
  Age  int
  sex  string
  Class *Class `json:"class"`
}
 
type Class struct {
  Name string
  Grade int
}
 
func main() {
//實例化一個數據結構,用于生成json字符串
  stu := Stu{
    Name: "張三",
    Age: 18,
    sex: "男",
  }
 
  //指針變量
  cla := new(Class)
  cla.Name = "1班"
  cla.Grade = 3
  stu.Class=cla
 
  //Marshal失敗時err!=nil
  jsonStu, err := json.Marshal(stu)
  if err != nil {
    fmt.Println("生成json字符串錯誤")
  }
 
  //jsonStu是[]byte類型,轉化成string類型便于查看
  fmt.Println(string(jsonStu))
}

程序輸出結果:

{"name":"張三","Age":18,"class":{"Name":"1班","Grade":3}}

閱讀以上代碼可以看出:

(1)只要是可導出成員(變量首字母大寫),都可以轉成json。因成員變量sex是不可導出的,故無法轉成json;

(2)如果變量打上了json標簽,如Name旁邊的 json:"name" ,那么轉化成的json key就用該標簽“name”,否則取字段名作為key,如"Age";

(3)指針變量,編碼時自動轉換為它所指向的值,如Class變量;

(4)強調一句,序列化成功后的json字符串是純粹的字符串。

以上就是Golang 如何解析和生成json的詳細內容,更多關于golang 解析、生成json的資料請關注服務器之家其它相關文章!

原文鏈接:https://cloud.tencent.com/developer/article/1446290

延伸 · 閱讀

精彩推薦
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
主站蜘蛛池模板: xxxxx大片在线观看 | 99精品在线免费 | 亚洲精品国产成人7777 | 欧美成人aa久久狼窝动画 | 禁忌高h| 精品在线播放 | 国产伊人网 | 国产微拍精品一区 | 久久精品国产亚洲AV蜜臀 | www在线免费观看 | 亚洲国产欧美在线人成aaaa20 | 亚洲天堂网在线观看视频 | 欧美特黄一级大片 | 国产精品福利久久2020 | 黑帮少爷爱上我第8集在线观看 | 忘忧草秋观看未满十八 | 我和么公的秘密小说免费 | 女老板用丝袜脚夹我好爽 | 亚洲午夜精品久久久久 | 日韩欧美推理片免费看完整版 | 2019年国产高清情侣视频 | 美国videos | 国产日韩成人 | 91这里只有精品 | 果冻传媒91 | 99热这里有精品 | 男人躁女人过程 | 亚洲国产成人精品无码区APP | 男生同性视频twink在线 | 成品人视频免费观看 | 国产日韩免费视频 | 毛片网站观看 | 精品久久久麻豆国产精品 | 欧美高清videosex极品 | 欧美黑大吊 | 美女机机对机机的视频(免费) | 99亚洲视频 | 色狠狠成人综合网 | 超高清欧美同性videos | 久久精品国产在热亚洲 | 亚洲日日做天天做日日谢 |