golang string转json的一些坑
先带来点冷知识,不知道大家知不知道,反正我刚知道...
大佬们都知道怎么在string中给string类型赋值带双引号的字符串,没错就是用反斜杠,如下:
msg := "{\"name\":\"zhangsan\", \"age\":18, \"id\":122463, \"sid\":122464}"
但是golang还支持另外一个符号,我初学时候以为是单引号,但其实不是,是esc键下边那个,那么赋值带双引号的字符串就如下就行了:
ret := `{"access_token":"uAUS6o5g-9rFWjYt39LYa7TKqiMVsIfCGPEN4IZzdAk5-T-ryVhL7xb8kYciuU_m","expires_in":7200}`
进入正题
先看一段代码,起作用是把字符串转换为结构体对应的json
type people struct {
name string `json:"name"`
age int `json:"age"`
id int `json:"id"`
}
type student struct {
people
id int `json:"sid"`
}
func main() {
msg := "{\"name\":\"zhangsan\", \"age\":18, \"id\":122463, \"sid\":122464}"
var someOne student
if err := json.Unmarshal([]byte(msg), &someOne); err == nil {
fmt.Println(someOne)
fmt.Println(someOne.people)
} else {
fmt.Println(err)
}
}
仔细看看,有没有错?我只能说,这样是输出不出来答案的,赋值错误,看下面的运行结果:

伤脑筋啊,我仔细看了半天,发现在定义的people和student两个结构体下边有绿色的波浪线(我用的vscode),像下边这样:

鼠标放上去显示的是:

大家都知道,golang中变量声明成大写和小写能引用的范围是不一样的,那我就想了,大小写问题???一脸懵逼把变量名首字母改成了大写,然后...就行了,代码变成了下边这样:
type people struct {
Name string `json:"name"`
Age int `json:"age"`
ID int `json:"id"`
}
type student struct {
people
ID int `json:"sid"`
}
func main() {
msg := "{\"name\":\"zhangsan\", \"age\":18, \"id\":122463, \"sid\":122464}"
var someOne student
if err := json.Unmarshal([]byte(msg), &someOne); err == nil {
fmt.Println(someOne)
fmt.Println(someOne.people)
} else {
fmt.Println(err)
}
}
输出的结果这样:

bingo!!!
golang有很多奇奇怪怪的特性,欢迎各位大佬挖掘讨论。
golang string转json的一些坑的更多相关文章
- [转]Golang 中使用 JSON 的小技巧
taowen是json-iterator的作者. 序列化和反序列化需要处理JSON和struct的关系,其中会用到一些技巧. 原文 Golang 中使用 JSON 的小技巧是他的经验之谈,介绍了一些s ...
- golang 学习笔记 ---JSON
JSON解析到结构体 在介绍这部分之前先简要介绍一下Json语法 JSON 语法是 JavaScript 语法的子集.JSON 语法是 JavaScript 对象表示法语法的子集. 数据在名称/值对中 ...
- golang结构体json格式化的时间格式
golang结构体json格式化的时间格式 在我们开发中,经常会解析time.Time 往往前台传过来的时候,是个string 但是我们希望在结构体转成time.Time type Param str ...
- java后台如何获取String 类型 json里的字段值
首先把获取到的数据转为json String sbody=Json.getGson().toJson(resp.getResponseBody()); Huanxin 这个类是 json数据对应字段的 ...
- string和json转换的简单应用
import com.alibaba.fastjson.JSON; String strjson = request.getParameter("param"); //url-js ...
- json转String 和 String转json 和判断对象类型
function ajaxGetMenuList(){ $.getJSON("login.do", function(json){ var r = ""; zN ...
- JS于string 和 json互转对象
一.json开启string JSON.stringify(jsonObj) 两.string开启json eval(string) 版权声明:本文博主原创文章.博客,未经同意不得转载.
- Golang中WaitGroup使用的一点坑
Golang中WaitGroup使用的一点坑 Golang 中的 WaitGroup 一直是同步 goroutine 的推荐实践.自己用了两年多也没遇到过什么问题.直到一天午睡后,同事扔过来一段奇怪的 ...
- golang string和[]byte的对比
golang string和[]byte的对比 为啥string和[]byte类型转换需要一定的代价?为啥内置函数copy会有一种特殊情况copy(dst []byte, src string) in ...
随机推荐
- python3爬虫-使用requests爬取起点小说
import requests from lxml import etree from urllib import parse import os, time def get_page_html(ur ...
- PTA-括号问题
括号问题 作者: 李廷元 单位: 中国民用航空飞行学院 时间限制: 400 ms 内存限制: 64 MB 代码长度限制: 16 KB 问题描述 给定一串字符,不超过100个字符,可能包括括号.数字.字 ...
- 《The C Programming Language》读书笔记(一)
1. 对这本书的印象 2011年进入大学本科,C语言入门书籍如果我没记错的话应该是谭浩强的<C程序设计>,而用现在的眼光来看,这本书只能算是一本可用的教材,并不能说是一本好书.在自学操作系 ...
- springMVC第一天——入门、整合与参数绑定
大纲摘要: 1.Springmvc介绍 2.入门程序 3.Springmvc架构讲解 a) 框架结构 b) 组件说明 4.Springmvc整合mybatis 5.参数绑定 乱码问题解决 a) Spr ...
- [Oracle]如何查看一个数据文件是否是自动扩展
开始 SQL> col file_id format 99SQL> col file_name format a50SQL> col tablespace_name format a ...
- 4820: [Sdoi2017]硬币游戏
4820: [Sdoi2017]硬币游戏 链接 分析: 期望dp+高斯消元. 首先可以建出AC自动机,Xi表示经过节点i的期望次数,然后高斯消元,这样点的个数太多,复杂度太大.但是AC自动机上末尾节点 ...
- IDEA 出现 updating indices 卡进度条问题的解决方案并加快索引速度
缺点: 这样的话,前端的接口(也就是字符串)就搜索不到了. C:\Users\Administrator\.IntelliJIdea2017.3\system 删除里面的caches文件夹(这里的 ...
- C#课后练手
猜拳(三局两胜)请输入您的手势:石头用户手势:石头 电脑手势:剪刀用户胜:1 电脑胜:0 请输入您的手势:石头用户手势:石头 电脑手势:石头用户胜:1 电脑胜: ...
- Loadrunner 性能指标
https://wenku.baidu.com/view/bf395a1db7360b4c2e3f64ca.html 希望能记住最好记住吧,这个很重要的. qq,979506750多交流
- 【坚持】Selenium+Python学习记录 DAY11
2018/06/1-2018/06/4 参考资料: [菜鸟教程](http://www.runoob.com/python3/python3-examples.html) [Python解惑:True ...