在 golang 中使用 Json

2021-08-07 04:25:11 字數 1784 閱讀 1911

序列化物件將使用 encoding/json 中的 marshal 函式。

函式原型為:func marshal(v inte***ce{}) (byte, error)

以下是官網給出的例子:

package main

import (

"encoding/json"

"fmt"

"os"

)func main()

group := colorgroup,

}b, err := json.marshal(group)

if err != nil

os.stdout.write(b)

}

需要注意的是:json.marshal返回了byte型別,通常情況下,需要將其轉換為string型別使用。

反序列化物件將使用 encoding/json 中的 unmarshal 函式。

函式原型為:func unmarshal(data byte, v inte***ce{}) error

以下是官網給出的例子:

package main

import (

"encoding/json"

"fmt"

)func main() ,

]`)type animal struct

var animals animal

err := json.unmarshal(jsonblob, &animals)

if err != nil

fmt.printf("%+v", animals)

}

在反序列化時,有可能不知道json資料的具體型別,那應該怎麼辦呢?

其實,觀察json.unmarshal的函式原型可以看到,其第二個引數是乙個inte***ce。

事實上,你可以傳入乙個inte***ce物件的指標,反序列化函式依然會填充這個物件。並且這個物件可以被轉換成為map[string]inte***ce{}這樣的型別或者inte***ce{}這樣的型別,這取決於json的內容。

於是,我們便有了在不知道json資料具體型別的情況下,解析json內容的方法。

**如下:

package main

import (

"encoding/json"

"fmt"

)func main() ,

]`)var jsonobject inte***ce{}

err := json.unmarshal(jsonblob, &jsonobject)

if err != nil

animals := jsonobject.(inte***ce{})

for i := 0; i < len(animals); i++ )

fmt.println(animalmap["name"])

fmt.println(animalmap["order"])

}}

如上,我們可以將反序列化出的物件,遞迴地進行型別轉換,轉換為inte***ce{}或者map[string]inte***ce{},這樣就能一層層地解析json的內容了。

當然,以上只是舉例,證明可以通過一些手段解析未知結構的json。為了正確解析未知結構的json內容,你可能需要為解析過程新增一些判斷,如解析出的物件的型別需要二選一,又如解析出的map型別中鍵的存在性等等。

Golang 在Golang中使用json

由於要開發乙個小型的web應用,而web應用大部分都會使用json作為資料傳輸的格式,所以有了這篇文章。包引用import 用於存放資料的結構體type mydata struct這裡需要注意的就是後面單引號中的內容。json item 這個的作用,就是name欄位在從結構體例項編碼到json資料格...

在Golang中使用Protobuf

本教程使用proto3版本的protocol buffer語言,提供了乙個基本的在go程式中使用protocol buffer的介紹。通過建立乙個簡單的示例應用程式,向你展示如何 它不是乙個全面的在go中使用protocol buffer的指南,更詳細的參考資訊請檢視前面的兩個教程。protobuf...

在 GoLang 中使用 jwt 進行認證

jwt 即 json web token,是用 json 形式安全傳輸資訊的方法。對 jwt 解碼,可以得到以下內容 jwt 可以設定過期時間,它的應用主要有 一般服務端生成 jwt 並返回給客戶端時,要放在 cookie裡,並且加上httponly的標記,意味著這個 cookie不能被 js獲取,...