Go程序例子(55):JSO
Go程序例子(55):JSO
Go语言提供了对JSO编码和解码的内置支持,这包括对内置数据类型以及自定义数据类型的转换。代码语言:go复制package main
import (
"encoding/json"
"fmt"
"os"
"strings"
)
// 我们将使用以下两
Go程序例子(55):JSO
Go语言提供了对JSO编码和解码的内置支持,这包括对内置数据类型以及自定义数据类型的转换。
代码语言:go复制package main
import (
"encoding/json"
"fmt"
"os"
"strings"
)
// 我们将使用以下两个结构体来演示自定义类型的编码和解码过程。
type respe1 struct {
Page int
Fruits []string
}
// 只有被导出的字段才会在JSO中进行编码或解码。字段必须以大写字母开头才能被导出。
type respe2 struct {
Page int `json:"page"`
Fruits []string `json:"fruits"`
}
func main() {
// 首先,我们将探讨如何将基础数据类型编码为JSO字符串。以下是一些原子值的示例。
bolB, _ := json.Marshal(true)
fmt.Println(string(bolB))
intB, _ := json.Marshal(1)
fmt.Println(string(intB))
fltB, _ := json.Marshal(2.4)
fmt.Println(string(fltB))
strB, _ := json.Marshal("gopher")
fmt.Println(string(strB))
// 以下是一些关于切片和映射的示例,它们会按照预期编码为JSO数组和对象。
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))
// JSO包能够自动编码您的自定义数据类型。它仅会在编码输出中包含已导出的字段,并默认使用这些字段的名称作为JSO键名。
res1D := &respe1{
Page: 1,
Fruits: []string{"apple", "peach", "pear"}}
res1B, _ := json.Marshal(res1D)
fmt.Println(string(res1B))
// 您可以在结构体字段声明上使用标签来自定义编码后的JSO键名。查看上面respe2的定义,即可看到此类标签的示例。
res2D := &respe2{
Page: 1,
Fruits: []string{"apple", "peach", "pear"}}
res2B, _ := json.Marshal(res2D)
fmt.Println(string(res2B))
// 现在,让我们探讨如何将JSO数据解码为Go中的值。这里有一个针对通用数据结构的示例。
byt := []byte(`{"num":6.1,"strs":["a","b"]}`)
// 我们需要提供一个变量,以便JSO包能够将解码后的数据存放其中。这里的map[string]interface{}将保存一个字符串到任意数据类型的映射。
var dat map[string]interface{}
// 接下来是实际的解码过程,以及对相关错误的检查。
if err := json.Unmarshal(byt, &dat); err != nil {
panic(err)
}
fmt.Println(dat)
// 为了使用解码后映射中的值,我们需要将它们转换为适当的类型。例如,这里我们将num中的值转换为预期的float64类型。
num := dat["num"].(float64)
fmt.Println(num)
// 访问嵌套数据需要进行一系列的转换。
strs := dat["strs"].([]interface{})
str1 := strs[0].(string)
fmt.Println(str1)
// 我们同样可以将JSO解码为自定义数据类型。这种做法能够为我们的程序增添额外的类型安全性,并在访问解码数据时省去类型断言的必要。
str := `{"page": 1, "fruits": ["apple", "peach"]}`
res := respe2{}
json.Unmarshal([]byte(str), &res)
fmt.Println(res)
fmt.Println(res.Fruits[0])
// 在上述示例中,我们始终使用字节和字符串作为数据与标准输出上的JSO表示之间的媒介。我们还可以直接将JSO编码流式传输到诸如os.Stdout之类的os.Writer,甚至是HTTP响应体中。
enc := (os.Stdout)
d := map[string]int{"apple": 5, "lettuce": 7}
enc.Encode(d)
// 要从os.Stdin或HTTP请求体等os.Reader进行流式读取,可以使用json.Decoder来完成。
dec := ((str))
res1 := respe2{}
dec.Decode(&res1)
fmt.Println(res1)
}
运行结果:
代码语言:javascript代码运行次数:0运行复制➜ go run json/json.go
true
1
2.4
"gopher"
["apple","peach","pear"]
{"apple":5,"lettuce":7}
{"Page":1,"Fruits":["apple","peach","pear"]}
{"page":1,"fruits":["apple","peach","pear"]}
map[num:6.1 strs:[a b]]
6.1
a
{1 [apple peach]}
apple
{"apple":5,"lettuce":7}
{1 [apple peach]}
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-21 14:12:31
推荐阅读
留言与评论(共有 10 条评论) |
本站网友 张诗诗 | 4分钟前 发表 |
res2D | |
本站网友 莆田seo | 28分钟前 发表 |
5 | |
本站网友 婷美化妆品怎么样 | 19分钟前 发表 |
bolB | |
本站网友 流浪地球票房 | 24分钟前 发表 |
= respe2{} json.Unmarshal([]byte(str) | |
本站网友 视频转换精灵 | 3分钟前 发表 |
= (os.Stdout) d | |
本站网友 轻伤害鉴定标准 | 30分钟前 发表 |
if err | |
本站网友 枳壳的作用 | 19分钟前 发表 |
"peach" | |
本站网友 对氨基苯甲酸 | 8分钟前 发表 |
代码语言:go复制package main import ( "encoding/json" "fmt" "os" "strings" ) // 我们将使用以下两个结构体来演示自定义类型的编码和解码过程 | |
本站网友 开放式厨房装修效果图 | 11分钟前 发表 |
6.1 |