您现在的位置是:首页 > 编程 > 

Go程序例子(55):JSO

2025-07-29 15:41:41
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组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1174433.html

相关标签:无
上传时间: 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