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

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

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

相关推荐
zhanghaha13141 小时前
Python进阶教程:35_PyQt (保姆级零基础教程)
开发语言·python·pyqt
释厄6231 小时前
多黑洞具现论·物理/生物/金融三域显化·虚拟宇宙黑洞·奇点=0 圆圈
开发语言·数据结构·人工智能·程序人生·安全威胁分析
Wx-bishekaifayuan2 小时前
springboot生活商城系统21035-计算机课程设计、毕业设计
spring boot·后端·python·spring·elasticsearch·golang·课程设计
Fruit_Caller3 小时前
static
开发语言·c++
codigger8 小时前
ObjectSense:一门千行内核、把可靠性写进骨子里的面向对象脚本语言
开发语言·编程·编程语言
小羊没烦恼!6 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕6 天前
JSONObject与JSONArray封装数据格式区别
java·json
A黄俊辉A6 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
伞伞悦读6 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
ttwuai6 天前
Go开源后台管理系统推荐:怎么按技术栈和边界比较4个官方仓库?
golang·gin