Golang 解析JSON

本文介绍了JSON(JavaScript Object Notation),一种轻量级的数据交换格式,它以易于人阅读和编写,同时也能让机器快速解析。JSON独立于语言,被广泛用于多种编程语言如Golang中进行数据序列化和反序列化。通过示例展示了如何在Golang中将自定义结构体转换为JSON,并解析回原始结构体。
摘要由CSDN通过智能技术生成

什么是JSON

  • JSON: JavaScript Object Notation(JavaScript 对象表示法)
  • JSON 是存储和交换文本信息的语法,类似 XML。
  • JSON 比 XML 更小、更快,更易解析。
  • JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
  • 简单来说,这种结构储存数据有许多优点,我们喜欢使用这种结构来传递数据,我们把自己的结构体转换成JSON格式,别人再将JSON格式解析成自己语言的结构体。

JSON语法规则

  • 数组(Array)用方括号(“[]”)表示。
  • 对象(Object)用大括号(”{}”)表示。
  • 名称/值对(name/value)组合成数组和对象。
  • 名称(name)置于双引号中,值(value)有字符串、数值、布尔值、null、对象和数组。
    并列的数据之间用逗号(“,”)分隔

Golang转义JSON

package main

import (
	"encoding/json"
	"fmt"
)

type userInfo struct {
	Name  string
	Age   int `json:"age"`
	Hobby []string
}

func main() {
	a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
	//实现了Marshaler接口的类型可以将自身序列化为合法的json描述。
	buf, err := json.Marshal(a)
	if err != nil {
		panic(err)
	}
	fmt.Println(buf)         // [123 34 78 97...]
	fmt.Println(string(buf)) // {"Name":"wang","age":18,"Hobby":["Golang","TypeScript"]}

	//MarshalIndent类似Marshal但会使用缩进将输出格式化。
	buf, err = json.MarshalIndent(a, "", "\t")
	if err != nil {
		panic(err)
	}
	fmt.Println(string(buf))

	var b userInfo
	// Unmarshal函数解析json编码的数据并将结果存入b指向的值。
	err = json.Unmarshal(buf, &b)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%#v\n", b) // main.userInfo{Name:"wang", Age:18, Hobby:[]string{"Golang", "TypeScript"}}
}
[123 34 78 97 109 101 34 58 34 119 97 110 103 34 44 34 97 103 101 34 58 49 56 44
 34 72 111 98 98 121 34 58 91 34 71 111 108 97 110 103 34 44 34 84 121 112 101 8
3 99 114 105 112 116 34 93 125]
{"Name":"wang","age":18,"Hobby":["Golang","TypeScript"]}                  
{                                                                         
        "Name": "wang",                                                   
        "age": 18,                                                        
        "Hobby": [                                                        
                "Golang",                                                 
                "TypeScript"                                              
        ]                                                                 
}                                                                         
main.userInfo{Name:"wang", Age:18, Hobby:[]string{"Golang", "TypeScript"}}

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值