go语言转换json字符串为json数据

在 Go 语言中,可以使用标准库 encoding/json 中的 json.Unmarshal 函数将 JSON 字符串转换为 JSON 数据(通常是 Go 中的结构体或 map 类型)。以下是一个简单的示例:

示例代码

go 复制代码
package main

import (
	"encoding/json"
	"fmt"
	"log"
)

// 定义一个结构体,用于映射 JSON 数据
type Person struct {
	Name    string `json:"name"`
	Age     int    `json:"age"`
	Hobbies []string `json:"hobbies"`
}

func main() {
	// JSON 字符串
	jsonStr := `{
		"name": "John",
		"age": 30,
		"hobbies": ["reading", "coding"]
	}`

	// 创建一个结构体变量用于存储解析后的数据
	var person Person

	// 将 JSON 字符串解析为结构体
	err := json.Unmarshal([]byte(jsonStr), &person)
	if err != nil {
		log.Fatalf("Error unmarshalling JSON: %v", err)
	}

	// 打印解析后的数据
	fmt.Printf("Name: %s\n", person.Name)
	fmt.Printf("Age: %d\n", person.Age)
	fmt.Printf("Hobbies: %v\n", person.Hobbies)
}

代码说明

  1. 定义结构体

    • 使用 struct 定义一个与 JSON 数据结构对应的 Go 结构体。
    • 使用 json:"key" 标签来指定 JSON 中的键与结构体字段的映射关系。
  2. json.Unmarshal 函数

    • json.Unmarshal(data []byte, v interface{}) error
      • data 是 JSON 字符串的字节切片。
      • v 是目标变量,用于存储解析后的数据。
      • 如果解析成功,v 中会包含 JSON 数据;如果失败,会返回错误。
  3. 错误处理

    • 如果 JSON 格式错误或结构体字段不匹配,json.Unmarshal 会返回错误。

输出结果

运行上述代码后,输出如下:

复制代码
Name: John
Age: 30
Hobbies: [reading coding]

使用 map 解析 JSON

如果 JSON 结构不固定,也可以使用 map[string]interface{} 来解析 JSON 数据,示例如下:

go 复制代码
package main

import (
	"encoding/json"
	"fmt"
	"log"
)

func main() {
	jsonStr := `{
		"name": "John",
		"age": 30,
		"hobbies": ["reading", "coding"]
	}`

	// 使用 map 存储解析后的数据
	var data map[string]interface{}

	// 解析 JSON
	err := json.Unmarshal([]byte(jsonStr), &data)
	if err != nil {
		log.Fatalf("Error unmarshalling JSON: %v", err)
	}

	// 访问 map 中的数据
	fmt.Printf("Name: %v\n", data["name"])
	fmt.Printf("Age: %v\n", data["age"])
	fmt.Printf("Hobbies: %v\n", data["hobbies"])
}

这种方式更加灵活,但需要通过类型断言来访问具体字段的值。

希望这些示例对你有帮助!

相关推荐
图码3 分钟前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
U盘失踪了9 分钟前
python curl转python脚本
开发语言·chrome·python
charlie1145141919 分钟前
Linux 字符设备驱动:cdev、设备号与设备模型
linux·开发语言·驱动开发·c
handler0111 分钟前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
FQNmxDG4S12 分钟前
Java泛型编程:类型擦除与泛型方法的应用场景
java·开发语言·python
我星期八休息34 分钟前
IT疑难杂症诊疗室:AI时代工程师Superpowers进化论
linux·开发语言·数据结构·人工智能·python·散列表
热心网友俣先生43 分钟前
2026年第二十三届五一数学建模竞赛C题超详细解题思路+各问题可用模型推荐+部分模型结果展示
c语言·开发语言·数学建模
01漫游者1 小时前
JavaScript函数与对象增强知识
开发语言·javascript·ecmascript
IGAn CTOU1 小时前
Java高级开发进阶教程之系列
java·开发语言
csbysj20201 小时前
SQL NULL 函数详解
开发语言