非零基础自学Golang 第11章 文件操作 11.3 处理JSON文件 11.3.2 解码JSON 11.4 小结

news2024/11/17 17:24:30

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第11章 文件操作
        • 11.3 处理JSON文件
          • 11.3.2 解码JSON
        • 11.4 小结

第11章 文件操作

11.3 处理JSON文件

11.3.2 解码JSON

解码JSON会使用到Unmarshal接口,也就是Marshal的反操作。

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

Unmarshal函数解析JSON编码的数据并将结果存入v指向的值。

要将JSON数据解码写入一个接口类型值,函数会将数据解码为如下类型写入接口:

Bool 对应JSON布尔类型

float64 对应JSON数字类型

string 对应JSON字符串类型

[]interface{} 对应JSON数组

map[string]interface{} 对应JSON对象

nil 对应JSON的null

如果一个JSON值不匹配给出的目标类型,或者一个JSON数字写入目标类型时溢出,Unmarshal函数会跳过该字段并尽量完成其余的解码操作。我们首先来看使用map解码JSON。

[ 动手写11.3.3]

package main

import (
   "encoding/json"
   "fmt"
)

func main() {

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

   // 创建一个map
   m := make(map[string]interface{}, 6)
   err := json.Unmarshal([]byte(jsonStr), &m)

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

   fmt.Println("m = ", m)

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

      }
   }
}

运行结果

在这里插入图片描述

使用map来解码JSON时,需要使用Go的类型断言【这个 后面在学 接口的时候还会详细的说】。

可见,使用map解码JSON需要对其类型进行判断,非常烦琐。我们再来看看使用struct来解码JSON,JSON库会自动对结构体的类型进行解析,无须类型判断。

[ 动手写 11.3.4]

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"`
   Language []string `json:"language"`
}

func main() {

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

   var person Person
   err := json.Unmarshal([]byte(jsonStr), &person)

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

   fmt.Printf("person = %+v", person)
}

运行结果

在这里插入图片描述

【提示】

当我们需要对大量的JSON进行快速解析处理时,标准库提供的JSON处理库“encoding/json”可能就不能满足我们的需求,GitHub开源了一个比标准库解析速度快10倍的fastjson库(https://github.com/valyala/fastjson)。

在这里插入图片描述

11.4 小结

  • 对目录的新建、查看和删除。
  • 对文件的新建、查看和删除。
  • 如何进行JSON编码与解码。

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

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

相关文章

30岁零基础没学历学Python怎么样?30岁学习Python晚吗?

30岁零基础没学历学Python怎么样?30岁学习Python晚吗?任何时候开始都不晚。30岁开始学习Python听起来年纪有点大,大家认为编程上了年纪学习编程语言是一个劣势。想在三十岁的时候通过学习Python来谋求一份IT程序员工作,则需要有一…

SQL笔记

SQL笔记 基本概述 数据库:保存有组织的数据的容器(通常是一个文件或一组文件)。容易混淆:人们通常用数据库这个术语来代表他们使用的数据库软件,这是不正确的,也因此产生了许多混淆。确切地说&#xff0c…

抖音关键词排名优化技巧,手把手教你怎样优化抖音关键词

云南百收科技有限公司 1、标题中出现关键词是关键词排名靠前的基础。 一篇文章中标题中一定要出现你想做的关键词,因为搜索引擎是是匹配标题的,如果你标题中没有关键词,是不会有排名的。而且还有一点,关键词的位置要靠近标题最前面…

python+pyqt5+mysql设计图书管理系统(1)- 数据库

一、概述 前面学习了python,pyqt和mysql的一些基础知识,接下来运用学习的东西进行实操制作一个项目--图书管理系统。 项目介绍:图书管理系统对于我们的图书管理来说非常重要,管理图书者可以通过系统有效的管理书籍,用户可以通过系统快速有效的找到自己需要的书籍。相比人工…

【目标跟踪】Kalman滤波目标跟踪【含Matlab源码 388期】

⛄一、获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。 获取代码方式2: 完整代码已上传我的资源:【目标跟踪】基于matlab Kalman滤波目标跟踪【含Matlab源…

聊一聊Unity的Test Framework应该怎么用

其实 Unity 很早就出了这个包,不过感觉基本上没什么人用,这么好的东西,本着让所有人都能了解的态度,今天就来聊聊它应该怎么使用。 第1步先安装它,或者给它升级到最新。 第2步打开工具的主窗口 支持分别在 PlayMode 或…

unity 2022大三期末大作业 3D立体魔方游戏(附下载链接)

unity 2022大三期末大作业 3D立体魔方游戏 这是本人的一个unity期末大作业,实现比较简单,unity版本是2018 的,导入即可运行无错误 下载链接 游戏可以一键打乱魔方的顺序,也可以一键还原等等功能,实现了魔方的使用功能…

手把手教你,从零开始搭建Spring Cloud Alibaba这份笔记太牛了

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。 Springcloud 和 Srpingcloud Alibaba 区别? SpringCloud: 部分组件停止维护和更新,给开发带来不便;SpringCl…

[附源码]Nodejs计算机毕业设计基于推荐算法的鞋服代购平台Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

【代码规范】lombok注解使用

【代码规范】lombok注解使用一、前言二、常用注解三、使用示例一、前言 上一篇文章(【JVM知识】插入式注解处理器实现java编程规范检测)总结了一下插入式注解,我们知道lombok插件是通过插入式注解处理器实现的,并且lombok插件在工…

版本控制器Git的使用。

目录 一、分布式版本工具 1、基本介绍 2、Git 安装配置 3、本地仓库和基础指令 二、分支 1、分支概述 2、解决冲突 三、Git远程仓库 1、常用的托管服务[远程仓库] 2、配置SSH公钥 3、操作远程仓库 4、解决合并冲突 三、IDEA中使用Git 1、在Idea中配置Git 2、ID…

什么是用户标签体系?

一.概况 标签:对某一类特定群体或对象的某项特征进行抽象分类和概括 标签体系:根据用户的“基本属性”,“行为特征”,“社交网络”,“心理特征” 和 “兴趣爱好”等,把个性化的用户,打上标签化…

入门:认识容器镜像

要启动容器最关键的就是镜像,我们来看看镜像相关的介绍。 初识容器镜像 首先我们来了解一下镜像的相关操作,比如现在我们希望把某个镜像从仓库下载到本地,这里使用官方的hello-world镜像: docker pull hello-world 只需要输入pull…

【CANN训练营第三季】2022年度第三季进阶班之AI目标属性编辑应用-数据预处理

了解华为的生态已经两年有余,用CANN做过两个模型的转换,跑过推理测试,但是感觉还是对CANN框架一知半解,恰巧看到2022年度第三季度训练营开班,赶紧报名参与上车。 本次课程是进阶版第一节正式课,主要讲解的…

零基础自学Python要多久才能学会?

零基础自学Python要多久?学习Python开发的周期因人而异,由于基础、学习效率不同有的人学习进度快,需要六个月到一年不等,有的人自律性较差可能需要更久的时间才能学会,今天小编分享下6个月学习周期内的自学Python的学习…

数据结构---计数排序

计数排序计数排序JAVA实现计数排序优化存在的问题1:存在的问题2JAVA实现局限性冒泡排序,还是快速排序,都是基于元素之间的比较来进行排序 有一些特殊的排序并不基于元素比较,如计数排序、桶排序、基数排序。 计数排序&#xff1a…

0. Arthas的基本安装和使用

我们慢慢寻找,直到找到我们的方向。 选择了方向,便一往无前。 我们爱那少年,一如爱我们自己。 Arthas 的简介 Arthas 的官方文档: https://arthas.aliyun.com/doc/ Arthas的官方命令文档: https://arthas.aliyun.com/doc/advanced-use.html …

数据结构-难点代码突破(C++实现图广度优先遍历,深度优先遍历,广度/深度优先遍历生成树和森林,广度优先遍历求单源非带权图两点最短路径)

注意:为了简便起见,这里采用邻接矩阵的方式储存图的边信息 文章目录1.邻接矩阵图的广度优先遍历单源非带权图的两点最短路径2. 邻接矩阵图的深度优先遍历3. 广度/深度优先遍历生成树和森林深度优先生成树与森林广度优先遍历生成树与森林图的遍历是指从图…

Compose回忆童年 - 手拉灯绳-开灯/关灯

一、前言 偶然间想到小时候顺着那白色开关垂下来的灯绳,拉一下“咔哒”一声,再拉一下又是“咔哒”一声。当时年龄小感觉新奇总是把灯开了关又关了开的拉着玩,以至于好几次拉坏了开关灯绳。 今天我们在手机上做一个拉不坏的灯绳&#x1f604…

毕业四年,我当初是如何走上编程这条路的!

感概万千,毕业已达4年之久。 想起在大学时期学习编程的事情,感觉很有意义,在此记录回顾一下。 希望自己初心未变,勇往向前 现状与过去 20210706 目前的我是在天津一家公司做前端开发,主要用Python。 从毕业实习到…