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"])
}

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

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

相关推荐
奇树谦38 分钟前
Qt|槽函数耗时操作阻塞主界面问题
开发语言·qt
小羊斩肖恩41 分钟前
Go性能优化深度指南:从原理到实战
开发语言·性能优化·golang
晨非辰2 小时前
#C语言——学习攻略:深挖指针路线(三)--数组与指针的结合、冒泡排序
c语言·开发语言·数据结构·学习·算法·排序算法·visual studio
一只小风华~5 小时前
JavaScript 函数
开发语言·前端·javascript·ecmascript·web
苕皮蓝牙土豆5 小时前
Qt 分裂布局:QSplitter 使用指南
开发语言·qt
Brookty8 小时前
Java线程安全与中断机制详解
java·开发语言·后端·学习·java-ee
從南走到北9 小时前
JAVA东郊到家按摩服务同款同城家政服务按摩私教茶艺师服务系统小程序+公众号+APP+H5
android·java·开发语言·微信小程序·小程序
遇见尚硅谷9 小时前
C语言:20250728学习(指针)
c语言·开发语言·数据结构·c++·笔记·学习·算法
☆璇10 小时前
【C++】C/C++内存管理
c语言·开发语言·c++
愿你天黑有灯下雨有伞10 小时前
枚举策略模式实战:优雅消除支付场景的if-else
java·开发语言·策略模式