由于要开发一个小型的web应用,而web应用大部分都会使用json作为数据传输的格式,所以有了这篇文章。
包引用

  1. import (
  2. "encoding/json"
  3. "github.com/bitly/go-simplejson" // for json get
  4. )

用于存放数据的结构体

  1. type MyData struct {
  2. Name string `json:"item"`
  3. Other float32 `json:"amount"`
  4. }

这里需要注意的就是后面单引号中的内容。

  1. `json:"item"`

这个的作用,就是Name字段在从结构体实例编码到JSON数据格式的时候,使用item作为名字。算是一种重命名的方式吧。

编码JSON

  1. var detail MyData
  2. detail.Name = "1"
  3. detail.Other = "2"
  4. body, err := json.Marshal(detail)
  5. if err != nil {
  6. panic(err.Error())
  7. }

我们使用Golang自带的encoding/json包对结构体进行编码到JSON数据。

  1. json.Marshal(...)

JSON解码
由于Golang自带的json包处理解码的过程较为复杂,所以这里使用一个第三方的包simplejson进行json数据的解码操作。

  1. js, err := simplejson.NewJson(body)
  2. if err != nil {
  3. panic(err.Error())
  4. }
  5. fmt.Println(js)

完!
来一个完整版:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. import (
  6. "encoding/json"
  7. "github.com/bitly/go-simplejson" // for json get
  8. )
  9. const (
  10. // flags to malloc
  11. _FlagNoScan = 4 << 1 // GC doesn't have to scan object
  12. )
  13. type MyData struct {
  14. Name string `json:"item"`
  15. Other float32 `json:"amount"`
  16. Test string
  17. }
  18. func main() {
  19. var detail MyData
  20. detail.Name = "1"
  21. detail.Other = 2
  22. detail.Test = "test"
  23. body, err := json.Marshal(detail)
  24. if err != nil {
  25. panic(err.Error())
  26. }
  27. fmt.Println(body)
  28. js, err := simplejson.NewJson(body)
  29. if err != nil {
  30. panic(err.Error())
  31. }
  32. fmt.Println(js)
  33. }

也可以在终端输出和写入文件:

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "log"
  6. "os"
  7. "bytes"
  8. )
  9. import (
  10. "encoding/json"
  11. )
  12. type ColorGroup struct {
  13. ID int
  14. Name string
  15. Colors []string
  16. }
  17. func main() {
  18. group := ColorGroup{
  19. ID: 1,
  20. Name: "Reds",
  21. Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
  22. }
  23. b, err := json.Marshal(group)
  24. if err != nil {
  25. fmt.Println("error:", err)
  26. }
  27. //生成json文件
  28. err = ioutil.WriteFile("test.json", b, os.ModeAppend)
  29. os.Chmod("test.json", 0644);
  30. if err != nil {
  31. return
  32. }
  33. var out bytes.Buffer
  34. err = json.Indent(&out, b, "", "\t")
  35. if err != nil {
  36. log.Fatalln(err)
  37. }
  38. out.WriteTo(os.Stdout)
  39. }

分类: web

标签:   golang