当前位置: 代码网 > it编程>前端脚本>Golang > Go语言中常用json处理操作小结

Go语言中常用json处理操作小结

2024年05月26日 Golang 我要评论
在 go 中,你可以使用内置的 encoding/json 包来处理 json 格式数据。该包提供了函数和类型,使你能够将 json 数据解析为 go 对象(反序列化)或将 go 对象转换为 json

在 go 中,你可以使用内置的 encoding/json 包来处理 json 格式数据。该包提供了函数和类型,使你能够将 json 数据解析为 go 对象(反序列化)或将 go 对象转换为 json 数据(序列化)。

下面是一些常见的 json 处理操作:

反序列化(解析 json)

使用 json.unmarshal 函数将 json 数据解析为 go 对象。该函数接受一个包含 json 数据的字节切片和一个指向目标 go 对象的指针,并将 json 数据映射到指定的 go 对象上。

package main

import (
    "encoding/json"
    "fmt"
)

type person struct {
    name string `json:"name"`
    age  int    `json:"age"`
}

func main() {
    jsondata := []byte(`{"name":"john", "age":30}`)
    var person person
    err := json.unmarshal(jsondata, &person)
    if err != nil {
        fmt.println("error:", err)
        return
    }
    fmt.println("name:", person.name)
    fmt.println("age:", person.age)
}

序列化(将 go 对象转换为 json)

使用 json.marshal 函数将 go 对象转换为 json 数据。该函数接受一个 go 对象,并返回表示该对象的 json 字节切片。

package main

import (
    "encoding/json"
    "fmt"
)

type person struct {
    name string `json:"name"`
    age  int    `json:"age"`
}

func main() {
    person := person{
        name: "john",
        age:  30,
    }
    jsondata, err := json.marshal(person)
    if err != nil {
        fmt.println("error:", err)
        return
    }
    fmt.println(string(jsondata))
}

处理嵌套结构和数组

在 go 中,你可以使用结构体嵌套和切片/数组来处理复杂的 json 数据结构。通过在结构体字段上添加 json 标签,可以指定 json 数据中的键名。

package main

import (
    "encoding/json"
    "fmt"
)

type address struct {
    city  string `json:"city"`
    state string `json:"state"`
}

type person struct {
    name    string   `json:"name"`
    age     int      `json:"age"`
    address []address `json:"address"`
}

func main() {
    jsondata := []byte(`{"name":"john", "age":30, "address":[{"city":"new york","state":"ny"},{"city":"san francisco","state":"ca"}]}`)
    var person person
    err := json.unmarshal(jsondata, &person)
    if err != nil {
        fmt.println("error:", err)
        return
    }
    fmt.println("name:", person.name)
    fmt.println("age:", person.age)
    fmt.println("address:", person.address)
}

以上示例展示了如何在 go 中处理 json 数据。你可以根据实际需求定义自己的数据结构,并使用 json 标签进行字段映射。

读取 json 文件

  • 使用 os 和 io/ioutil 包来读取 json 文件的内容,并将其存储为字节切片。
  • 使用 json.unmarshal 函数将字节切片解析为 go 对象。
package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "os"
)

type person struct {
    name string `json:"name"`
    age  int    `json:"age"`
}

func main() {
    file, err := os.open("data.json")
    if err != nil {
        fmt.println("error:", err)
        return
    }
    defer file.close()

    jsondata, err := ioutil.readall(file)
    if err != nil {
        fmt.println("error:", err)
        return
    }

    var person person
    err = json.unmarshal(jsondata, &person)
    if err != nil {
        fmt.println("error:", err)
        return
    }

    fmt.println("name:", person.name)
    fmt.println("age:", person.age)
}

在上述示例中,我们打开名为 data.json 的 json 文件,并将其内容读取为字节切片。然后,我们使用 json.unmarshal 将字节切片解析为 person 对象。

写入 json 文件

  • 使用 os 和 io/ioutil 包来创建或打开要写入的 json 文件。
  • 使用 json.marshalindent 函数将 go 对象转换为带缩进的 json 字节切片。
  • 使用 ioutil.writefile 函数将 json 字节切片写入 json 文件。
package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
)

type person struct {
    name string `json:"name"`
    age  int    `json:"age"`
}

func main() {
    person := person{
        name: "john",
        age:  30,
    }

    jsondata, err := json.marshalindent(person, "", "  ")
    if err != nil {
        fmt.println("error:", err)
        return
    }

    err = ioutil.writefile("output.json", jsondata, 0644)
    if err != nil {
        fmt.println("error:", err)
        return
    }

    fmt.println("json file created.")
}

在上述示例中,我们创建一个名为 output.json 的 json 文件,并将 person 对象转换为带缩进的 json 字节切片。然后,我们使用 ioutil.writefile 将 json 字节切片写入文件。

到此这篇关于go语言中常用json处理操作小结的文章就介绍到这了,更多相关go json处理内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com