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

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

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

相关推荐
冷雨夜中漫步8 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
m0_7369191010 小时前
C++代码风格检查工具
开发语言·c++·算法
2501_9449347310 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
黎雁·泠崖10 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_7634724611 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
TechWJ12 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
lly20240612 小时前
C++ 文件和流
开发语言
m0_7066532312 小时前
分布式系统安全通信
开发语言·c++·算法
2501_9419820512 小时前
深度对比:Java、Go、Python 实现企微外部群推送,哪个效率更高?
java·golang·企业微信
寻寻觅觅☆13 小时前
东华OJ-基础题-104-A == B ?(C++)
开发语言·c++