golang进行json字符串转化

map转化为json

package main

import (
   "encoding/json"
   "log"
   "fmt"
)

func main() {
   user := make(map[string]string)
   user["username"]="kongyixueyuan"
   user["address"]="北京"
   jsonStr, err := json.Marshal(user)
   if err!=nil{
      log.Fatal(err)
   }
   fmt.Printf("%s",jsonStr)
}

array转化为json

package main

import (
   "encoding/json"

   "log"
   "fmt"
)

func main() {
   personArr := [3]string{"小李","王二狗","老毕"}
   jsonStr, err := json.Marshal(personArr)
   if err!=nil{
      log.Fatal()
   }
   fmt.Printf("%s\n",jsonStr)
}

[3]string改为[3]interface{}也可以转换成功

package main

import (
   "encoding/json"

   "log"
   "fmt"
)

func main() {
   personArr := [3]interface{}{"小李","王二狗","老毕"}
   jsonStr, err := json.Marshal(personArr)
   if err!=nil{
      log.Fatal()
   }
   fmt.Printf("%s\n",jsonStr)


}

struct转json

package main

import (
   "fmt"
   "encoding/json"
   "log"
)

type Person struct {
   UserName string
   Age int
}
func main() {
   str:=Person{"王二狗",30}
   jsonStr, err := json.Marshal(str)
   if err!=nil{
      log.Fatal(err)
   }
   fmt.Println(string(jsonStr))
}

注意,结构体属性必须首字母大字,否则转化不了

type Person struct {
   UserName string `json:"aaa"`
   Age int `json:"bbb"`
}

结构体属性名可以设置别名 只需要在属性类型后输入'json:"别名"' 即可

扫描二维码关注公众号,回复: 2770762 查看本文章

输出结果:{"aaa":"王二狗","bbb":30}

如果哪个结构体属性不想显示了。可以用'json:"-"'

type Person struct {
   UserName string `json:"aaa"`
   Age int `json:"-"`
}

输出结果:{"aaa":"王二狗"}

以后开发也习惯把所有结构体首字母大写。

嵌套结构体转换

package main

import (
   "fmt"
   "encoding/json"
   "log"
)

type Address struct {
   Province string
   City string
   Number int
}

type Person struct {
   UserName string `json:"aaa"`
   Age int `json:"-"`
   Addrs Address
}
func main() {
   str:=Person{"王二狗",30,Address{"北京","海淀区",1803}}
   jsonStr, err := json.Marshal(str)
   if err!=nil{
      log.Fatal(err)
   }
   fmt.Println(string(jsonStr))
}

打印结果:

{"aaa":"王二狗","Addrs":{"Province":"北京","City":"海淀区","Number":1803}} 如果Address字符有名字是父子关系

如果把名字删除就变成兄弟关系了

type Person struct {
   UserName string `json:"aaa"`
   Age int `json:"-"`
   Address
}

输出结果:

{"aaa":"王二狗","Province":"北京","City":"海淀区","Number":1803}

把json字符串格式化,用+号去填写,不足的用-号填写

package main

import (
   "fmt"
   "encoding/json"
   "log"
)

type Address struct {
   Province string
   City string
   Number int
}

type Person struct {
   UserName string `json:"aaa"`
   Age int `json:"-"`
   Address
}
func main() {
   str := Person{"王二狗", 30, Address{"北京", "海淀区", 1803}}
   jsonStr, err := json.Marshal(str)
   if err != nil {
      log.Fatal(err)
   }
   fmt.Println(string(jsonStr))

   jsonStr2, err := json.MarshalIndent(str, "+", "-")
   fmt.Println(string(jsonStr2))
}

输出结果:

{
+-"aaa": "王二狗",
+-"Province": "北京",
+-"City": "海淀区",
+-"Number": 1803

+}

这个挺有用,就是如果从服务器获取的json格式很乱,没法看。我们就可以用这个方法格式化成好看些。

将json转换成map

package main

import (
   "encoding/json"
   "fmt"
)

func main() {
   str:="{\"address\":\"北京\",\"username\":\"kongyixueyuan\"}"
   myMap:=make(map[string]string)
   json.Unmarshal([]byte(str),&myMap)
   fmt.Println(myMap)
}

输出:

map[address:北京 username:kongyixueyuan]





猜你喜欢

转载自blog.csdn.net/xiaonu123/article/details/80597047