序列化物件將使用 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獲取,...