JSON

Go语言教程

字号+ 作者:H5之家 来源:H5之家 2017-01-31 11:06 我要评论( )

Go提供对JSON编码和解码的内置支持,包括内置和自定义数据类型。 我们将使用两个结构来演示下面的自定义类型的编码和解码。 首先,我们将看到基本数据类型到JSON字符串的编码。 这里有一些原子值的例子。 具体的每个函数,可参考示例中的代码 - 所有的示例代

Go提供对JSON编码和解码的内置支持,包括内置和自定义数据类型。
我们将使用两个结构来演示下面的自定义类型的编码和解码。

首先,我们将看到基本数据类型到JSON字符串的编码。 这里有一些原子值的例子。

具体的每个函数,可参考示例中的代码 -

所有的示例代码,都放在 F:\worksp\golang 目录下。安装Go编程环境请参考:

json.go的完整代码如下所示 -

package main import "encoding/json" import "fmt" import "os" // We'll use these two structs to demonstrate encoding and // decoding of custom types below. type Response1 struct { Page int Fruits []string } type Response2 struct { Page int `json:"page"` Fruits []string `json:"fruits"` } func main() { // First we'll look at encoding basic data types to // JSON strings. Here are some examples for atomic // values. bolB, _ := json.Marshal(true) fmt.Println(string(bolB)) intB, _ := json.Marshal(1) fmt.Println(string(intB)) fltB, _ := json.Marshal(2.34) fmt.Println(string(fltB)) strB, _ := json.Marshal("gopher") fmt.Println(string(strB)) // And here are some for slices and maps, which encode // to JSON arrays and objects as you'd expect. slcD := []string{"apple", "peach", "pear"} slcB, _ := json.Marshal(slcD) fmt.Println(string(slcB)) mapD := map[string]int{"apple": 5, "lettuce": 7} mapB, _ := json.Marshal(mapD) fmt.Println(string(mapB)) // The JSON package can automatically encode your // custom data types. It will only include exported // fields in the encoded output and will by default // use those names as the JSON keys. res1D := &Response1{ Page: 1, Fruits: []string{"apple", "peach", "pear"}} res1B, _ := json.Marshal(res1D) fmt.Println(string(res1B)) // You can use tags on struct field declarations // to customize the encoded JSON key names. Check the // definition of `Response2` above to see an example // of such tags. res2D := &Response2{ Page: 1, Fruits: []string{"apple", "peach", "pear"}} res2B, _ := json.Marshal(res2D) fmt.Println(string(res2B)) // Now let's look at decoding JSON data into Go // values. Here's an example for a generic data // structure. byt := []byte(`{"num":6.13,"strs":["a","b"]}`) // We need to provide a variable where the JSON // package can put the decoded data. This // `map[string]interface{}` will hold a map of strings // to arbitrary data types. var dat map[string]interface{} // Here's the actual decoding, and a check for // associated errors. if err := json.Unmarshal(byt, &dat); err != nil { panic(err) } fmt.Println(dat) // In order to use the values in the decoded map, // we'll need to cast them to their appropriate type. // For example here we cast the value in `num` to // the expected `float64` type. num := dat["num"].(float64) fmt.Println(num) // Accessing nested data requires a series of // casts. strs := dat["strs"].([]interface{}) str1 := strs[0].(string) fmt.Println(str1) // We can also decode JSON into custom data types. // This has the advantages of adding additional // type-safety to our programs and eliminating the // need for type assertions when accessing the decoded // data. str := `{"page": 1, "fruits": ["apple", "peach"]}` res := Response2{} json.Unmarshal([]byte(str), &res) fmt.Println(res) fmt.Println(res.Fruits[0]) // In the examples above we always used bytes and // strings as intermediates between the data and // JSON representation on standard out. We can also // stream JSON encodings directly to `os.Writer`s like // `os.Stdout` or even HTTP response bodies. enc := json.NewEncoder(os.Stdout) d := map[string]int{"apple": 5, "lettuce": 7} enc.Encode(d) }

执行上面代码,将得到以下输出结果 -

F:\worksp\golang>go run json.go true 1 2.34 "gopher" ["apple","peach","pear"] {"apple":5,"lettuce":7} {"Page":1,"Fruits":["apple","peach","pear"]} {"page":1,"fruits":["apple","peach","pear"]} map[num:6.13 strs:[a b]] 6.13 a {1 [apple peach]} apple {"apple":5,"lettuce":7}

本文属作者原创,转载请注明出处:易百教程

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 程序员教程

    程序员教程

    2017-01-30 18:02

  • 易语言解析JSON教程

    易语言解析JSON教程

    2017-01-30 15:00

  • Elasticsearch 随机返回数据

    Elasticsearch 随机返回数据

    2017-01-28 18:01

  • json教程,json教程pdf,json教程下载,struts

    json教程,json教程pdf,json教程下载,struts

    2017-01-28 17:02

网友点评
s