golang中struct、json、map互相轉化
golang中struct、json、map互相轉化
2018年05月07日 23:14:14 小拳頭 閱讀數:2704更多
個人分類: go
版權宣告:本文為博主原創文章,轉載請標明原文地址,謝謝 ^_^ https://blog.csdn.net/xiaoquantouer/article/details/80233177
一、Json和struct互換
(1)Json轉struct例子:
package main
import (
"fmt"
"encoding/json"
)
type People struct {
Name string `json:"name_title"`
Age int `json:"age_size"`
}
func JsonToStructDemo(){
jsonStr := `
{
"name_title": "jqw"
"age_size":12
}
`
var people People
json.Unmarshal([]byte(jsonStr), &people)
fmt.Println(people)
}
func main(){
JsonToStructDemo()
}
輸出:
注意json裡面的key和struct裡面的key要一致,struct中的key的首字母必須大寫,而json中大小寫都可以。
(2)struct轉json
在結構體中引入tag標籤,這樣匹配的時候json串對應的欄位名需要與tag標籤中定義的欄位名匹配,當然tag中定義的名稱不需要首字母大寫,且對應的json串中欄位名仍然大小寫不敏感。此時,結構體中對應的欄位名可以不用和匹配的一致,但是首字母必須大寫,只有大寫才是可對外提供訪問的。
例子:
package main
import (
"fmt"
"encoding/json"
)
type People struct {
Name string `json:"name_title"`
Age int `json:"age_size"`
}
func StructToJsonDemo(){
p := People{
Name: "jqw",
Age: 18,
}
jsonBytes, err := json.Marshal(p)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(jsonBytes))
}
func main(){
StructToJsonDemo()
}
輸出:
二、json和map互轉
(1)json轉map例子:
func JsonToMapDemo(){
jsonStr := `
{
"name": "jqw",
"age": 18
}
`
var mapResult map[string]interface{}
err := json.Unmarshal([]byte(jsonStr), &mapResult)
if err != nil {
fmt.Println("JsonToMapDemo err: ", err)
}
fmt.Println(mapResult)
}
輸出:
(2)map轉Json例子
func MapToJsonDemo1(){
mapInstances := []map[string]interface{}{}
instance_1 := map[string]interface{}{"name": "John", "age": 10}
instance_2 := map[string]interface{}{"name": "Alex", "age": 12}
mapInstances = append(mapInstances, instance_1, instance_2)
jsonStr, err := json.Marshal(mapInstances)
if err != nil {
fmt.Println("MapToJsonDemo err: ", err)
}
fmt.Println(string(jsonStr))
}
輸出:
例2:
func MapToJsonDemo2(){
b, _ := json.Marshal(map[string]int{"test":1, "try":2})
fmt.Println(string(b))
}
輸出:
三、map和struct互轉
(1)map轉struct
需要安裝一個第三方庫
在命令列中執行: go get github.com/goinggo/mapstructure
例子:
func MapToStructDemo(){
mapInstance := make(map[string]interface{})
mapInstance["Name"] = "jqw"
mapInstance["Age"] = 18
var people People
err := mapstructure.Decode(mapInstance, &people)
if err != nil {
fmt.Println(err)
}
fmt.Println(people)
}
輸出
(2)struct轉map例子
func StructToMapDemo(obj interface{}) map[string]interface{}{
obj1 := reflect.TypeOf(obj)
obj2 := reflect.ValueOf(obj)
var data = make(map[string]interface{})
for i := 0; i < obj1.NumField(); i++ {
data[obj1.Field(i).Name] = obj2.Field(i).Interface()
}
return data
}
func TestStructToMap(){
student := Student{10, "jqw", 18}
data := StructToMapDemo(student)
fmt.Println(data)
}
輸出:
相關文章
- Golang操作結構體、Map轉化為JSONGolang結構體JSON
- struct轉map (反射)Struct反射
- golang-json, 原始碼解釋struct轉json時,struct對屬性欄位需要大寫才能轉譯成功GolangJSON原始碼Struct
- json序列化與反序列化 (map,struct, slice, 基本資料型別)JSONStruct資料型別
- Map 轉json資料,json資料轉換為MapJSON
- Java map轉JSONJavaJSON
- json字串與物件互相轉換JSON字串物件
- JAVA 中 string 和 int 互相轉化Java
- array+map+struct.hqlStruct
- js 陣列,字串,json互相轉換陣列字串JSON
- Json序列化在golang中的應用JSONGolang
- 整明白 Golang struct 例項化和賦值GolangStruct賦值
- golang通過反射使用json字串呼叫struct的指定方法及返回json結果Golang反射JSON字串Struct
- Golang中struct結構標籤(Tag)的使用GolangStruct
- js 中的json物件和mapJSON物件
- Java Stram實現Map和字串之間互相轉換| BaeldungJava字串
- Java 實現 Map 和 Object 互相轉換的幾種方法JavaObject
- JSON物件中的JSONObject和JSONArray以及與Map、String、陣列的轉化JSON物件Object陣列
- 用struct做unordered_map的keyStruct
- Json,String,Map之間的轉換JSON
- golang 多維mapGolang
- golang struct 有點小疑問?GolangStruct
- json轉化JSON
- Go 之基礎速學 (七) golang 裡包的使用 JSON 化 struct 結構體以及 if else 的初次使用(二)GolangJSONStruct結構體
- 巢狀的map轉json,怎麼整,求助巢狀JSON
- java json和物件互相裝換JavaJSON物件
- json keyname mapJSON
- Golang 學習——結構體 struct (一)Golang結構體Struct
- Golang 學習——結構體 struct (二)Golang結構體Struct
- 徹底理解Golang MapGolang
- Golang 引用型別-mapGolang型別
- golang讀取檔案的json資料流,並解析到struct,儲存到資料庫GolangJSONStruct資料庫
- json字串與Object、List、Map的互轉工具類JSON字串Object
- Golang json 解析GolangJSON
- golang json 示例GolangJSON
- 關於Golang struct{}{}用法和注意事項GolangStruct
- golang 學習之路之 struct 結構體GolangStruct結構體
- mysql表結構自動生成golang structMySqlGolangStruct