好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Golang 如何解析和生成json

Golang 如何解析和生成json

熱門標簽:福州鐵通自動外呼系統 濮陽自動外呼系統代理 地圖標注測試 賺地圖標注的錢犯法嗎 廣東語音外呼系統供應商 烏魯木齊人工電銷機器人系統 長沙ai機器人電銷 智能電銷機器人營銷 澳門防封電銷卡

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

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

1.解析json

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

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,具體實現如下:

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的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • golang 實現json類型不確定時的轉換
  • golang中json的omitempty使用操作
  • golang:json 反序列化的[]和nil操作
  • 解決Golang json序列化字符串時多了\的情況
  • 解決golang json解析出現值為空的問題
  • golang xorm及time.Time自定義解決json日期格式的問題
  • golang 實現struct、json、map互相轉化
  • golang中json小談之字符串轉浮點數的操作

標簽:慶陽 太原 西雙版納 調研邀請 廣西 貴陽 阿克蘇 德州

巨人網絡通訊聲明:本文標題《Golang 如何解析和生成json》,本文關鍵詞  Golang,如何,解析,和,生成,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Golang 如何解析和生成json》相關的同類信息!
  • 本頁收集關于Golang 如何解析和生成json的相關信息資訊供網民參考!
  • 推薦文章