GO: json 处理

需要引入"encoding/json"包

json解析到map

jsonStr := "{\"a\":\"test\",\"b\":\"testb\"}"
var dat map[string]string
err := json.Unmarshal([]byte(jsonStr), &dat)
if err == nil {fmt.Println(dat)
}结果:
map[a:test b:testb]

json解析到数组

	jsonStr := "[\"test\",\"testb\"]"var dat []stringerr := json.Unmarshal([]byte(jsonStr), &dat)if err == nil {fmt.Println(dat)}

json 解析到结构体

package mainimport ("encoding/json""fmt"
)type Person struct {//结构也是一种类型Name string //定义struct的属性Age  int
}func main() {   var person PersonjsonStr := "{\"Name\":\"test\",\"Age\":19}"if err := json.Unmarshal([]byte(jsonStr), &person); err == nil {fmt.Println(person)}
}
结果:
{test 19}

interface{}

如果不想用结构体,怎么办,如api接收过来的参数,不确定json串里面有什么数据类型,可通过interface{}实现

示例:

package mainimport ("encoding/json""fmt"
)
func main() {var data map[string]interface{}jsonStr := "{\"Name\":\"test\",\"Age\":19,\"infos\":[{\"info1\":\"hello\"},{\"info2\":\"hello\"}],\"pic\":{\"pic1\":\"img.jpg\"}}"err := json.Unmarshal([]byte(jsonStr), &data)if err != nil {fmt.Println(err)}fmt.Println(data)for _,value:=range data{switch value.(type) {case float64:fmt.Println(value)case string:fmt.Println(value)case []interface {}:for k,v:=range value.([]interface {}){fmt.Println(k,v)}case map[string]interface {}:for k,v:=range value.(map[string]interface {}){fmt.Println(k,v)}}}
}
输出结果:
map[infos:map[info:hello] Name:test Age:19]

将数组或结构体转成json

package mainimport ("encoding/json""fmt"
)
func main() { arr := []string{"aaa", "bbb", "ccc"}data, err := json.Marshal(arr)if err == nil {//data是[]byte类型,转化成string类型便于查看fmt.Println(string(data))}
}

小结:

1、用interface{}需要注意, JSON 里的数字默认都会转成 Golang 的 float64 类型,字符是string,使用方式为

fmt.Println(data["Name"].(string))
fmt.Println(data["Age"].(float64))

float64转其他类型,可参考:类型转换

2、golang 里json不是字符串而是 []byte类型,如果想用字符串可以用string()转。

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

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

相关文章

内容检索(2024.05.12)

随着创作数量的增加,博客文章所涉及的内容越来越庞杂,为了更为方便地阅读,后续更新发布的文章将陆续在此汇总并附上原文链接,感兴趣的小伙伴们可持续关注文章发布动态! 本期更新内容: 1. 信号仿真类话题-…

webpack5基础和配置

初步体验webpack打包 webpack是一个静态资源打包工具。 它会以一个或多个文件作为打包的入口,将我们整个项目所有文件编译组合成一个或多个文件输出出去。 输出的文件就是编译好的文件,就可以在浏览器段运行了。 1.初始化最简单的一个目录文件&#xff…

JavaSE——集合框架一(1/7)-集合体系概述(集合体系结构,Collection集合体系)、Collection的常用方法(介绍,实例演示,代码)

目录 集合体系概述 集合体系结构 Collection集合体系 Collection的常用方法 介绍 实例演示 完整代码 集合体系概述 集合体系结构 集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。 为了满足…

element-ui 中 如何在el-upload的移除文件列表事件 on-remove 中调用后端进行数据库的删除。

问题描述: 刚开始的时候我设置的是实时上传: auto-upload"true", :http-request"uploadResource"绑定的这个方法就去后端进行实时上传附件了,这个时候就已经保存到数据库。 那么问题来了: :on-remove"…

flask+layui显示监控视频

1、flask简介 flask是python中的一个轻量级web框架。 2、layui简介 Layui 是一套开源免费的 Web UI 组件库,采用自身轻量级模块化规范,遵循原生态的 HTML/CSS/JavaScript 开发模式,非常适合网页界面的快速构建。Layui 区别于一众主流的前端…

# ERROR: node with name “rabbit“ already running on “MS-ITALIJUXHAMJ“ 解决方案

ERROR: node with name “rabbit” already running on “MS-ITALIJUXHAMJ” 解决方案 一、问题描述: 1、启动 rabbitmq-server.bat 服务时,出错 Error 2、查询 rabbitmqctl status 状态时,出错 Error 3、停止 rabbitmqctl stop 服务时&a…

Rust 语言的“命名空间” —— mod

在Rust中,虽然没有像C中的namespace这样的显式关键字,但是Rust通过模块(mod)系统提供了一种类似命名空间的功能。模块允许你将相关的代码组织在一起,并可以通过pub关键字来控制哪些项(如函数、结构体、枚举…

软考 系统架构设计师系列知识点之杂项集萃(3)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(2) 第4题 软件架构贯穿于软件的整个生命周期,但在不同阶段对软件架构的关注力度并不相同,在( )阶段,对软件架构的关注最多。…

clickhouse卸载与安装

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS),来自于俄罗斯本土搜索引擎企业Yandex公司。它是为处理大规模数据集而设计的,并提供高性能和低延迟的查询支持。 注意:此教程的运…

关于画图-一次性搞定各类高级论文作图及配色

关于画图-一次性搞定各类高级论文作图及配色 图(Figure)可以让各类论文的结果更加直观,有时候一张图片比一大段文字更有说服力。 但许多新手作者可能会有一连串的疑惑:数据这么多,什么时候该做什么类型的图&#xff…

LabVIEW开发MOOG控制系统数据处理软件

LabVIEW开发MOOG控制系统数据处理软件 在现代航空领域,飞机结构的静强度试验是保证飞机安全运行的关键环节。MOOG加载控制系统作为试验中的关键设备,其数据输出的直观性和易处理性对于提高试验效率具有重要意义。设计了一种基于LabVIEW的MOOG控制系统数…

redis并发之跳表

简介 跳表(Skip List)是一种用于实现有序集合(Sorted Set)的数据结构,在 Redis 中被广泛应用。跳表的设计旨在提供高效的有序集合操作,可以将跳表理解为基于二分查找的索引结构。跳表通过构建多层索引&…

Minio 纠删码及分布式Minio集群环境搭建

系列文章目录 第二章 Minio 纠删码及分布式Minio集群环境搭建 Minio 纠删码及分布式Minio集群环境搭建 系列文章目录纠删码什么是纠删码?为什么纠删码有用?什么是位衰减bit rot保护? 纠错码单机模式环境搭建分布式MinIO分布式存储可靠性常用方法冗余校验 分布式M…

Pikachu 靶场 File Inclusion 通关解析

前言 Pikachu靶场是一种常见的网络安全训练平台,用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境,供安全专业人士、学生和爱好者练习和测试他们的技能。 Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术,…

Android面试题之kotlin热流和channel

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点 于冷流不同,在垃圾回收之前,flow里的值都是存在内存之中,并且处于活跃状态 StateFlow StateFlow是一个状态容…

【Python】items()方法的介绍和使用方式

相关链接:【Python】顺序字典(OrderedDict)的定义和使用方式 相关链接:【Python】普通字典的定义和使用方式 相关链接:【Python】get()方法的介绍和使用方式 在 Python 中,字典(dict&#xff0…

DSA理解理解蓝桥杯例题signature

一、历史 1991年8月,NIST(Nation Institute of Standards and Technology,美国国家标准技术研究所)提出了数字签名算法(DSA)用于他们的数字签名标准(DSS)中。 DSA是算法&#xff0c…

什么是渐进式框架

渐进式框架是一种设计理念,它允许开发者根据项目需求逐步采用框架的功能。这意味着你可以从一个非常轻量、简洁的开始,根据实际需要不断引入更多的组件和功能。这种方式的好处在于它使得项目的起点低、上手快,同时随着项目的增长,…

双向带头循环链表(图解)

文章目录 头节点(哨兵位)双向循环结构头插尾插头删尾删在指定位置之前插入数据删除指定位置之前的数据销毁链表 全部代码结语 单链表地址 头节点(哨兵位) 什么是头节点呢?头节点也叫哨兵节点,他在链表中进行不了任何操作,只是用来放哨用的,在单链表中我们当我们尾插的时候我们…

使用Flask构建POST请求的Web应用

文章目录 准备工作创建路由处理POST请求创建表单页面运行应用结论 在Web开发中,处理POST请求是一项常见任务,特别是在构建表单提交、用户注册和数据提交等功能时。Flask是一个简单而强大的Python Web框架,它提供了方便的工具来处理HTTP请求&a…