Go语言编程之json格式的编码和解码

20.1 JSON-JSON接口以及在Go语言中使用JSON 介绍了JSON基本概念以及在go语言背景下的JSON接口和使用方式,并分享了代码实践。 阅读详情

       Json是一种比xml更轻量级的数据交换格式,在易于人们阅读编写的同时,也易于程序解析和生成。尽json是JavaScript的一个子集,但json采用完全独立与编程的文本格式,且表现为键值对集合的文本描述形式,这使得他称为较为理想的、跨平台、跨语言的数据交换语言。

        开发者可以用json传输简单的字符串、数字、布尔值,也可以传输一个数组,或者一个更复杂的复合结构。在web开发领域中,json被广泛应用于web服务端程序和客户端之间的数据通信。

       Go语言内建对json的支持。使用Go语言内置的encoding/json标准库,开发者可以轻松的使用Go程序生成和解析json格式的数据。

1.编码json

【1】通过结构体生成json

package main

import (
	"encoding/json"
	"fmt"
)

//成员首字母必须大写
type IT struct {
	Company  string `json: "company"` //这样格式化后Company变成company,首字母变小写
	Subjects []string
	Isok     bool
	Price    float64 `json: "-"`      //-表示不让字段输出在屏幕
	Str      bool    `json:",string"` //表示将这个字段转化为字符串输出
}

func main() {
	//定义一个结构体变量,同时初始化
	s := IT{"itcast", []string{"Go", "C++", "Python", "Test"}, true, 666.666, false}

	//编码,根据内容生成json文本
	buf1, err1 := json.Marshal(s)
	if err1 != nil {
		fmt.Println(err1)
		return
	}
	//格式化输出,有层次打印json,后两个参数分别为每一行的前缀,每一层的缩进
	buf2, err2 := json.MarshalIndent(s, "", "\t")
	if err2 != nil {
		fmt.Println(err2)
		return
	}
	fmt.Println("buf1 = ", string(buf1))
	fmt.Println("buf2 = ", string(buf2))
}

输出:

【2】通过map生成json

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	//创建一个map
	m := make(map[string]interface{}, 4)
	m["company"] = "itcast"
	m["objects"] = []string{"Go", "Python", "C++", "Test"}
	m["isok"] = true
	m["price"] = 666.666

	//编码成json
	result, err := json.MarshalIndent(m, "", "\t")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("result = ", string(result))
}

输出:

2.解码json

【1】json解析到结构体

package main

import (
	"encoding/json"
	"fmt"
)

type IT struct {
	Company  string   `json: "company"`
	Subjects []string `json: "subjects"`
	Isok     bool     `json: "isok"`
	Price    float64  `json: "price"`
}

func main() {
	jsonBuf := `
	{
    "company": "itcast",
    "subjects": [
	    "Go",
        "Python",
        "C++",
        "Test"
    ],
	"isok": true,
    "price": 666.666
}`
	var tmp IT                                   //定义一个结构体变量
	err := json.Unmarshal([]byte(jsonBuf), &tmp) //第二个参数要地址传递
	if err != nil {
		fmt.Println(err)
		return
	}
	//fmt.Println("tmp = ", tmp)
	fmt.Printf("tmp = %+v\n", tmp)
	type IT2 struct {
		Subjects []string `json:"subjects"` //只想获取subjects中的数据
	}

	//定义结构体变量
	var tmp2 IT2
	err2 := json.Unmarshal([]byte(jsonBuf), &tmp2)
	if err2 != nil {
		fmt.Println(err2)
		return
	}
	fmt.Printf("tmp2 = %+v\n", tmp2)
}

输出:

【2】json解析到map

package main

import (
	"encoding/json"
	"fmt"
)

type IT struct {
	Company  string   `json: "company"`
	Subjects []string `json: "subjects"`
	Isok     bool     `json: "isok"`
	Price    float64  `json: "price"`
}

func main() {
	jsonBuf := `
	{
    "company": "itcast",
    "subjects": [
	    "Go",
        "Python",
        "C++",
        "Test"
    ],
	"isok": true,
    "price": 666.666
}`
	m := make(map[string]interface{}, 4)
	err := json.Unmarshal([]byte(jsonBuf), &m)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("m = %+v\n", m)

	//类型断言
	for key, value := range m {
		switch value.(type) {
		case string:
			fmt.Printf("map[%s]的类型为string,value为%v\n", key, value)
		case bool:
			fmt.Printf("map[%s]的类型为bool,value为%v\n", key, value)
		case float64:
			fmt.Printf("map[%s]的类型为float64,value为%v\n", key, value)
		case []interface{}:
			fmt.Printf("map[%s]的类型为[]interface{},value为%v\n", key, value)
		default:
			fmt.Println("error")
		}
	}
}

输出:

Golang编程基础第三篇——Golang对Json处理 一,什么是Json JSON(JavaScript Object Notation)是一种基于JavaScript语法子集的开放标准数据交换格式。JSON是基于文本的,轻量级的,通常被认为易于读/写。 Json是一种比XML更轻量级的数据交换格式,更适合成为较为理想,跨平台,跨语言的数据交换语言,成为项目配置文件的首选。开发者可以用Json传输简单的字符串,数字,布尔值,也可以传输一个数组... 阅读详情

相关推荐

ANSYS Sherlock新手避坑:从ODB++文件导入到属性匹配的完整流程(附官方教程路径)

本文详细解析了ANSYS Sherlock从ODB++文件导入到属性匹配的完整流程,帮助新手避开常见陷阱。内容包括环境准备、官方教程使用技巧、ODB++导入关键检查点、属性验证策略及常见报错解决方案,特别强调了路径设置和材料匹配的重要性,提升仿真效率。

weixin_42519781的博客 455

Go下encoding/json的Indent()接口以及Marshal()和MarshalIndent()的区别

通俗来讲,Indent()对读的结果做了一些处理,简单说就是对Json 多了一些格式处理。 而MarshalIndent()函数实现里就调用了饿Indent(). 比如: js,_ := json.Marshal(&person) jsIndent,_ := json.MarshalIndent(&person, "", "\t") fmt.Println("\njs:\n...

judgejames的博客 1万+

PostgreSQL向量数据插件--pgvector安装(附PostgreSQL安装)

本文为本人在安装pgvector中踩过的坑,已找到解决方法,现向大家分享。

m0_62627802的博客 2万+

[Golang] json.Marshal问题总结

json.Marshal在处理匿名字段的时候有可能遭遇的问题。

m0_38059938的博客 3591

一阶电路基础知识

一阶电路(First-order circuit)是指由一个电感(L)或一个电容(C)和一个电阻(R)组成的电路。根据电感或电容的位置,一阶电路可以分为RC电路、RL电路、LC电路、RLC电路。一阶电路常用于滤波、放大、时序控制等各种电子设备和系统中。通过调整电阻、电容或电感的数值,可以改变电路的频率响应、滞后/提前相位等特性,实现不同的功能和性能一阶、二阶电路区别一阶电路由一个电容或一个电感与一个电阻组成,而二阶电路则由两个电容或两个电感与一个电阻组成。

weixin_45365488的博客 1万+

Blender软件导出地形到Gazebo中

Blender软件导出地形到Gazebo中,并配置纹理、刚度、高度。

m0_70652514的博客 3376

GO语言基础教程(182)Go解析JSON之编码JSON:Go语言驯服JSON指南:让你的数据“活”起来,不再当码农苦力!

还在为Go语言里处理JSON头疼?别慌!这篇指南专治各种“编码不服”。我们将手把手带你玩转Go的JSON编码,从基础Marshal到高级定制,用最接地气的方式拆解每个步骤。你不仅会学到如何把结构体变成JSON字符串,还能用结构体标签精准操控输出,甚至处理嵌套、忽略字段等骚操作。附赠完整可跑的代码示例,复制粘贴就能用,保你从此告别熬夜Debug,效率直接起飞!

jxf_jxfcsdn的博客 335

【破局之道】LangChain4j 0.31.0 + Java 8 + Spring Boot:在“过时”环境中构建本地大模型应用的实战指南

本文为使用Java 8和Spring Boot等“过时”技术栈的团队提供了构建本地大模型应用的实战指南。通过采用LangChain4j 0.31.0这一兼容版本,结合Ollama部署本地大模型,开发者无需升级JDK即可在现有项目中快速集成AI能力,实现智能问答、文档摘要等功能,为传统项目注入创新活力。

t4y5u6i7o的博客 557

Go 中如何打印结构体?代码调试效率提升

首先,我们来定义一个结构体,它会被接下来所有的方法用到。Age int8Sex stringID int64我们定义了一个Article结构体用于表示一篇文章,内部包含内部实现了IDTitle和Content基础属性,还有一个字段是Author结构体指针,用于保存作者信息。我将先介绍四种基本的方式。本文主要介绍了 Go 语言中打印结构体的不同方法。我们从简单的fmt.Printf到使用反射,甚至是第三方库,我们是有很多选择。简单主题深入起来,扩展内容也可很丰富。

我是波罗学 1969

【RS】哨兵系列数据下载(哨兵2号Sentinel-2波段介绍、下载)

以哨兵二号为示例,分享如何下载欧空局的哨兵系列数据

Remote Sensing迷途小书童 1万+

YOLOv12改进策略【Neck】| arXiv 2024 MAFPN:多分支辅助特征金字塔网络 | 通过双向辅助融合与异构卷积机制,解决传统PAFPN多尺度特征融合不充分与小目标检测不足问题

本文记录的是利用MAFPN颈部结构改进YOLOv12的目标检测网络模型。通过引入双向辅助融合机制优化特征处理流程,在自底向上路径利用 SAF 模块融合主干浅层特征与颈部输出,并保留浅层空间信息,为小目标检测提供更丰富细节;自顶向下路径通过 AAF 模块建立密集连接,聚合浅层高 / 低分辨率层、同级层及前层特征,均衡各层通道数后实现多向梯度信息交互,增强中 / 大目标特征表达。将其应用到中,解决传统特征金字塔在多尺度信息整合中的不足,提升多尺度目标检测的精度与特征表达的丰富性。Multi-Branch Aux

Limiiiing的博客 1256

go语言:json处理(json.Marshal和json.Unmarshal的使用)

golang对json的处理,使用json.Marshal和json.Unmarshal

aCfeng的专栏 1783

ESP32-C3入门教程 基础篇⑩——SNTP(Simple Network Time Protocol) 网络时间同步的简单实例

ESP32-C3入门教程 基础篇⑩——SNTP(Simple Network Time Protocol) 网络时间同步的简单实例

1589

go vs python api对接_go beego框架与python实现数据交互

目标:将go中一个二维数组传到pythone中处理并返回。难点在于数据格式的转换。go代码如下:package mainimport ("os/exec""syscall""github.com/astaxie/beego""encoding/json")func main() {a := [][]float64{{1,2},{3,4},}json_a,_:=json.Marshal(a)stri...

weixin_39552304的博客 181

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

初识Go语言23-常用标准库【编码】

初识Go语言23-常用标准库【编码】

m0_52896752的博客 367

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Go源码】01 标准库

目录 1. fmt 1.1. 格式化输出 1.2. 基本函数 1.3. 特殊实现 2. log 2.1. 简介 2.2. 输出到 2.3. 自定义logger 3. sync 3.1. 概述 3.2. 代码 学习资料 Golang标准库文档 1. fmt 1.1. 格式化输出 fmt包含有格式化I/O函数,类似于C语言的printf和scanf。格式字符串的规则来源于C,但更简单一些 1.2. 基本函数 print Println 1.3. 特殊实现 2.

baidu_34170531的博客 361

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Go 现实世界项目的设计模式(四)

nil {在前面的示例中,Name类型的值被序列化为 JSON 字符串(而不是之前的对象)。序列化由方法处理,该方法返回一个包含由逗号分隔的姓氏和名字的字节序列数组。= nil {return errreturn nilName类型是的实现。当解码器遇到键为"Authors"的 JSON 对象时,它使用方法从 JSON 字符串重新构建 Go 结构体Name类型。

龙哥盟 1179

Go入门实战:JSON编码和解码

1.背景介绍 Go语言是一种强类型、静态类型、编译型、并发型、简洁、高性能的编程语言。Go语言的设计目标是让程序员更好地编写并发程序,同时提供简单易用的语法和强大的标准库。Go语言的核心团队成员来自Google,其中包括Robert Griesemer、Rob Pike和Ken Thompson等人。Go语言的发展历程可以追溯到2007年,当时Google的一些工程师在开发Google的内部系统...

AI天才研究院 722

Go语言的JSON编码与decoder

1.背景介绍 1. 背景介绍 Go语言是一种现代编程语言,由Google的Robert Griesemer、Rob Pike和Ken Thompson在2009年开发。Go语言的设计目标是简洁、高效、可扩展和易于使用。它的特点是强类型、垃圾回收、并发处理等。Go语言的标准库提供了丰富的功能,包括处理网络、文件、JSON等。 JSON(JavaScript Object Notation)是一...

AI天才研究院 1429

Go 语言编程 — encoding/json 库

目录 文章目录目录encoding/json使用 json.Marshal() 函数对一组数据进行 JSON 格式的编码使用 json.Unmarshal() 函数对 JSON 数据进行解码 encoding/json Golang 提供了的标准库 encoding/json 对 JSON 数据进行编解码,并且允许使用 map[string]interface{} 和 []interface{} 类型的值来分别存放未知结构的 JSON 对象或数组。 使用 json.Marshal() 函数对一组数据进行 J

烟云的计算 2854

Go语言——Json处理

文章目录□ JSON处理1. 编码JSON (编组|封送 Marshaling)1. Marhsal()2. MarshalIndent3. struct tag4. 通过map生成JSON2. 解码JSON(解组|解封送:Unmarshaling) □ JSON处理  JSON (JavaScript Object Notation)是一种比XML更轻量级的数据交换格式,在易于人们阅读和编写的同时,也易于程序解析和生成。  尽管JSON是JavaScript的一个子集,但JSON采用完全独立于编程语言的文

脑袋装水的博客 2917

golang的json编码与解码

golang对于json数据格式的编码和解码方法详解

屎山搬运工 1394

如何在Go中使用JSON

在本教程中,您创建了一个新程序来使用Go标准库中的包。首先,你使用具有类型的函数以一种灵活的方式创建JSON数据。然后,你更新了你的程序,使用json结构体标签和struct类型来以一致和可靠的方式使用生成json数据。之后,你使用具有类型的函数将JSON字符串解码为Go数据。最后,你使用之前用函数定义的struct类型来根据这些struct字段进行解析和类型转换。使用包,你将能够与互联网上的许多api进行交互,从而创建自己与流行网站的集成。

码觉客的博客 1万+

Go入门指南-12.9JSON 数据格式

数据结构要在网络中传输或保存到文件,就必须对其编码和解码;目前存在很多编码格式:JSON,XML,gob,Google 缓冲协议等等。Go 语言支持所有这些编码格式;在后面的章节,我们将讨论前三种格式。结构可能包含二进制数据,如果将其作为文本打印,那么可读性是很差的。另外结构内部可能包含匿名字段,而不清楚数据的用意。通过把数据转换成纯文本,使用命名的字段来标注,让其具有可读性。这样的数据格式可以通过网络传输,而且是与平台无关的,任何类型的应用都能够读取和输出,不与操作系统和编程语言的类型相关。序列化。

qq_45030264的博客 1129

Golang中JSON文件处理

Go语言编程系列文章 Go语言学习历程整理: 序号 文章 1. ????Go 爬虫之优快云博客信息 文章目录 系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 JSON是一种比XML更轻量级的数据交换格式,易于阅读和编写的同时,也易于程序的解析和生成。此外,虽然JSON源于JS, 由于JSON采用了完全独立于语言的文本格式,采用键值的方式构建描述信息,因此逐渐成为较理想的、跨平台的、跨语言的数据交.

遇见你是我最美丽的意外 1780

青少年编程与数学 02_001 GO语言程序设计基础 19课题、JSON数据

本文介绍了JSON数据格式及其在Go语言中的处理方法。JSON是一种轻量级的数据交换格式,基于JavaScript的子集,易于人阅读和机器解析。它由键值对组成,支持多种数据类型。在Go语言中,使用包处理JSON数据,包括解码(将JSON字符串转换为Go数据结构)和编码(将Go数据结构转换为JSON字符串)。解码时需定义匹配JSON键名的结构体,编码时将Go结构体转换为JSON。

明月看潮生的博客 1666
上一篇: Go语言中的正则表达式
下一篇: Go语言编程中文件处理方法
random_w
博客等级 码龄9年 130粉丝 168原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值