非零基础自学Golang 第11章 文件操作 11.3 处理JSON文件 11.3.1 编码JSON

news2024/9/23 1:25:22

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第11章 文件操作
        • 11.3 处理JSON文件
          • 11.3.1 编码JSON

第11章 文件操作

11.3 处理JSON文件

JSON(JavaScript Object Notation,JS对象简谱)是一种轻量级的数据交换格式。

JSON最初是属于JavaScript的一部分,后来由于其良好的可读性和便于快速编写的特性,现在已独立于语言,基本上所有的语言都支持JSON数据的编码和解码。特别是对于网络编程而言,JSON的重要性不言而喻。【确实】

JSON中的键都是字符串形式,值可以取任意类型。

它有以下三种结构:

  • 值为字符串或数组类型:{“name”:“John”,“age”:20}
  • JSON数组:[{“name”:" John",“age”:20},{“name”:“Tom”,“age”:21}]
  • 值为对象类型:{“name”:" John ", “birthday”:{“month”:8,“day”:26}},类似于对象嵌套对象

其中,大括号“{}”用来描述一组“不同类型的无序键值对集合”,方括号“[]”用来描述一组“相同类型的有序数据集合”。

关于JSON的更多信息,可以访问JSON官方网址http://json.org/进行查阅。

在这里插入图片描述

我们先来看一个JSON样例,后面的程序都是基于这个样例编写的。

{
 	"name":"小丁",
 	"age":23,
 	"sex":true,
 	"birthday":"2022-12-05",
 	"company":"字节跳动",
 	"language":[
 	"Go",
 	"Java",
 	"Python"
 ]
}

11.3.1 编码JSON

标准库提供了encoding/json库来处理JSON。

编码JSON,即从其他的数据类型编码成JSON字符串,这个过程我们会使用如下的接口:

func Marshal(v interface{}) ([]byte, error)

Marshal函数返回interface{}类型的JSON编码,通常interface{}类型会使用map或者结构体。

为了让输出的JSON字符串更加直观,可以使用另一个JSON编码接口,对输出的JSON进行格式化操作。

func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)

MarshalIndent类似于Marshal,但会使用缩进将输出格式化。我们可以使用map来创建最简单的JSON。

[ 动手写 11.3.1 ]

package main

import (
   "encoding/json"
   "fmt"
)

func main() {

   // 创建一个map
   m := make(map[string]interface{}, 6)

   m["name"] = "小丁"
   m["age"] = 23
   m["sex"] = true
   m["birthday"] = "2022-12-05"
   m["company"] = "字节跳动"

   m["language"] = []string{"Go", "Java", "Python"}

   // 编码成JSON
   result, _ := json.Marshal(m)
   resultFormat, _ := json.MarshalIndent(m, "", "       ")

   fmt.Println("result = ", string(result))
   fmt.Println("resultFormat = ", string(resultFormat))
}

运行结果

在这里插入图片描述

大多数情况下,我们会使用struct结构体来进行快速的JSON编码、解码,特别是在JSON解码时,使用struct会相当方便。

[ 动手写 11.3.2]

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name     string   `json:"name"`
	Age      int      `json:"age"`
	Sex      bool     `json:"sex"`
	Birthday string   `json:"birthday"`
	Company  string   `json:"company,omitempty"`
	Language []string `json:"language"`
}

func main() {

	// 定义一个结构体变量
	person := Person{"小丁", 23, true, "2022-12-05", "字节跳动", []string{"Go", "Java", "Python"}}

	result, err := json.MarshalIndent(person, "", "       ")

	if err != nil {
		fmt.Println(err)
	}

	fmt.Println("result = ", string(result))
}

运行结果

在这里插入图片描述

在定义struct字段的时候,可以在字段后面添加标签来控制编码/解码的过程:是否要编码或解码某个字段,JSON中的字段名称是什么。

可以选择的控制字段有三种:

  1. -:不要解析这个字段。
  2. omitempty:当字段为空(默认值)时,不要解析这个字段。比如false、0、nil、长度为0的array、map、slice、string。
  3. FieldName:当解析JSON的时候,使用这个名字。

在动手写11.3.2中,“json:"name"”就是定义的第三类标签,表示将Name属性的key值解析为name。

Name string `json:"name"`

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++基础学习笔记(二)——基础入门PART2

一、数组 一个集合中,里面存放了相同类型的数据元素 特点1:数组中的每个数据元素都是相同的数据类型 特点2:数组是由连续的内存位置组成的 1.1 一维数组 一维数组定义的三种方式: 数据类型 数组名[ 数组长度 ];数据类型 数组…

高通平台开发系列讲解(充电篇)充电底层驱动 power_supply 子系统

文章目录 一、Power Supply组成二、power_supply结构体说明三、驱动接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 电池驱动采取的是 linux 内核驱动中的power_supply子系统框架进行上报电池状态。 一、Power Supply组成 power supply framework在kernel/driver…

微服务真的是万能解药吗?

程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store DevWeekly收集整理每周优质开发者内容,包括开源项目、资源工具、技术文章等方面。 每周五定期发布,同步更新到 知乎:Jackpop。 欢迎大家投稿,提交issu…

Spring MVC学习 | 拦截器异常处理器

文章目录一、拦截器1.1 简介1.2 拦截器的使用1.2.1 创建1.2.2 配置1.2.3 测试1.3 多个拦截器的执行顺序1.3.1 preHandle()方法返回true1.3.2 preHandle()方法返回false二、异常处理器2.1 简介2.2 配置2.2.1 springmvc.xml中配置2.2.2 注解配置学习视频🎥&#xff1a…

编码与解码总结

标准ASC||字符集: ASC||:美国信息交换标准代码,包括了英文、数字等标准ASC||使用一个字节存储一个字符,首位是0,总供可以表示128个字符 GBK(汉字内码扩展规范,国标) 汉字编码字符集…

Apache Shiro,这一篇就够了

Apache Shiro,这一篇就够了1.Shiro实现登录拦截2.登录认证操作3.Shiro整合Mybatis4.用户授权操作5.Shiro授权6.Shiro整合Thymeleaf1.Shiro实现登录拦截 前期环境准备 准备添加Shiro的内置过滤器: Bean public ShiroFilterFactoryBean shiroFilterFact…

《美国职业橄榄球大联盟》:NFL·橄榄1号位

基本装备 NFL橄榄球是一项过程极为激烈的比赛,阻挡、拦截与冲撞都是比赛不可或缺的一部分,这也可以说是橄榄球的一大特色。为了保护球员的安全,避免因为球员受伤而耽误球赛, NFL与NCAA都要求所有球员必须“穿戴合适且合法的护具”…

IfcOpenShell正确设置几何体的坐标

在之前的文章中,我们使用 IfcOpenShell (IOS) 读取 ifc 几何并将其转换为 brep。 当我们读取 wikilab.ifc文件时,一切似乎都是正确的,但真的如此吗? 当你在项目中使用 BIM 时,坐标始终是正确讨论的主题。 就此而言&am…

Android开发如何使用Docker为Jenkins持续集成助力

Android开发如何使用Docker为持续集成助力 为什么使用Docker 我为啥要使用到Docker呢?其实也是被动的,因为公司的项目托管在Coding上面,然后Jenkins集成也用的是Coding的,Coding默认提供了Android-29,JDK-8的构建环境…

【JAVA进阶】多态,内部类

📃个人主页:个人主页 🔥系列专栏:JAVASE基础 目录 一、多态 1.多态的概述 2.多态的优势 3.类型转换问题 二、内部类 1.内部类概述[了解] 2.静态内部类[了解] 3.成员内部类[了解] 4.匿名内部类概述[重点] 一、多态 1.多态…

树状数组经典例题

目录 1.数星星 2.小朋友排队 3.求逆序对 1.数星星 题目描述 天空中有一些星星,这些星星都是在不同的位置,每个星星都有一个坐标。 如果一个星星的左下方(包含正左和正下)有k颗星星,就说这颗星星是k级的。 例如,上图中星星5是3级的(1,2,4在它的左下),星星2,4是1级的。…

idea中推送本地仓库和远程仓库后代码回退

本地仓库代码提交后回退 提交到本地仓库后 点击提交后会保存在本地仓库 本地仓库的回撤 找到git的提交记录 右键选择撤销还原 撤销还原后会出现提交文件,成功将本地仓库的文件移除,但是本地的错误代码仍然存在 如果想撤销提交到本地仓库的错误文…

SOLID 设计原则 - 这篇最容易消化

面向对象设计原则 SOLID 应该是职业程序员必须掌握的基本原则,每个程序员都应该了然于胸,遵守这 5 个原则可以帮助我们写出易维护、易拓展的高内聚低耦合的代码。 它是由罗伯特C马丁(知名的 Rob 大叔)21世纪初期 (准确来说,2000年在他的论文…

DevOps实战系列【第十章】:详解Jenkins Pipeline基本概念和语法

个人亲自录制全套DevOps系列实战教程 :手把手教你玩转DevOps全栈技术 流水线基本概念 官方中文手册: https://www.jenkins.io/zh/doc/book/pipeline 我们最好在结合英文文档去看,因为翻译过来的中文比较乱。 Jenkins pipeline是一套插件&…

MySQL 日志,难怪被模仿

一.前言 日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。 通过分析日志,我们可以优化数据库性能,排除故障,甚至能够还原数…

中文文献检索网站

1. 中国知网 网址: https://www.cnki.net/ 中国知网被称众多科研人称国内文献论文最全最权威的中文文献库,知网提供中国学术文献、外文文献、学位论文、报纸、会议、年鉴、工具书等各类资源统一检索、统一导航、在线阅读和下载服务。 2. 掌桥科研 网址…

25.Django大型电商项目之地址管理——如何使用三级联动菜单数据加载地址、保存数据、动态获取数据、设置默认值

1. 地址管理基本页面 1.1 概述 1.2 流程 修改templates的跳转链接center.html <ul><li><a href"/userapp/address/">地址管理</a></li> </ul>templates {% extends base.html %} {% block title %}用户中心{% endblock %} {…

东北大学数据结构第八周(排序)

7-1 快速排序 作者 朱允刚 单位 吉林大学 给定包含n个元素的整型数组a[1],a[2],…,a[n]&#xff0c;利用快速排序算法对其进行递增排序&#xff0c;请输出排序过程&#xff0c;即每次Partition之后的数组。每次选择所处理的子数组的第一个元素作为基准元素。 输入格式: 输入为…

MapReduce 序列化案例

文章目录MapReduce 序列化案例一、案例需求二、案例分析map 阶段Reduce 阶段三、代码实现1、编写流量统计的Bean对象2、Mapper阶段代码MapReduce 序列化案例 一、案例需求 1、需求&#xff1a; 统计每一个手机号耗费的总上行流量&#xff0c;下行流量&#xff0c;总流量 2、输…

二、ZFNet可视化卷积神经网络——可解释性机器学习(DataWhale组队学习)

目录引言ZFNet的网络结构可视化反卷积反池化反激活反卷积训练细节特征可视化特征演化特征不变性局部遮挡测试敏感性分析相关性分析消融实验宽度影响深度影响迁移学习能力有效性分析总结引言 纽约大学ZFNet&#xff0c;2013年ImageNet图像分类竞赛冠军模型。对AlexNet进行改进的…