go基础之json格式数据处理

go标准库里面提供了一个包进行go格式的数据处理,官方文档地址:https://golang.org/pkg/encoding/json/ 具体文档大家可以自己去看,这里只记录我自己作为一个初学者踩的坑。

1、结构体小写问题导致出错

type studentInfo struct {
subjects []string
name string
id string
}

一开始我的结构定义如上面所示,但是由于go语法的问题,结构字段首字母如果小写的话不能被其他模块使用,只能被该包内使用,即定义该结构所在文件最上面的package ** 定义的包名。这样我在调用json.Marshal()之后返回的是空的json数据,因为结构体不能被json包正确使用。导致出错。所以第一步需要把结构体的首字母改成大写。

参考阅读:

https://www.blang.io/posts/2014-03_golang-exporting/

https://stackoverflow.com/questions/21825322/why-golang-cannot-generate-json-from-struct-with-front-lowercase-character

https://stackoverflow.com/questions/11693865/lowercase-json-key-names-with-json-marshal-in-go

2、struct没有正确加tag

type studentInfo struct {
Subjects []string
Name string
Id string
}

将结构体定义的字段首字母改成大写之后,调用json.Marshal()之后正常返回了,json格式的数据。但是字段名就如定义的字段一样。但是我实际使用的时候需要是全部小写的字母。

3、struct加上tag

type studentInfo struct {
Subjects []string 'json:"subjects"'
Name string 'json:"name"'
Id string 'json:"id"'
}

定义成上面的格式之后,完美解决了我的问题,正确编码了json格式,字段也正确。

下面是简单的示例:

package main

import (
"fmt"
"encoding/json"
"os"
) func main(){
type StudentInfo struct {
Subjects []string 'json:"subjects"'
Name string 'json:"name"'
Id string 'json:"id"'
} subjects := []string{fmt.Sprintf("\"192.168.43.127\"")} student := new(StudentInfo)
student.Name = "zhangsan"
student.Id = "123456"
student.Subjects = subjects jsonStr, err := json.Marshal(student)
if err != nil{
fmt.Printf("%s", err)
}
fmt.Printf("%+v\n",tunnel)
os.Stdout.Write(jsonStr)
fmt.Printf("\n") }

更多相关例子请查看:https://golang.org/pkg/encoding/json/#example_Marshal

4、struct tag扩展

官方参考文档链接:https://godoc.org/reflect#StructTag.Get

tag最有用的功能之一是指定字段名称映射。如果您需要进行大量数据转换,它会非常方便。 比如数据库的ORM实现,很多都是使用这个tag特性实现的。tag底层用的方法是reflect实现的。下面是官方给出的示例代码:

type S struct {
F string `species:"gopher" color:"blue"`
} s := S{}
st := reflect.TypeOf(s)
field := st.Field(0)
fmt.Println(field.Tag.Get("color"), field.Tag.Get("species"))

更多拓展阅读:

https://github.com/golang/go/wiki/Well-known-struct-tags

https://sosedoff.com/2016/07/16/golang-struct-tags.html

go基础之json格式数据处理的更多相关文章

  1. jquery ajax调用返回json格式数据处理

    Ajax请求默认的都是异步的 如果想同步 async设置为false就可以(默认是true) var html = $.ajax({ url: "some.php", async: ...

  2. JS基础语法---JSON格式的数据

         1. 对象: 有属性和方法,特指的某个事物     对象: 一组无序属性的集合的键值对,属性的值可以是任意的类型   2.JSON格式的数据:一般都是成对的,是键值对,     json也是 ...

  3. mysql json格式数据处理

    1.查询字段所对应的值: SELECT c.result_http->"$.create_time",json_extract(c.result_http,"$.e ...

  4. Java入门系列:处理Json格式数据

    本节主要讲解: 1)json格式数据处理方法 2)第三方工具包的使用方法 3)java集合数据类型 [项目任务] 编写一个程序,显示未来的天气信息. [知识点解析] 为了方便后面代码的分析,先需要掌握 ...

  5. ajax处理返回的三种格式(json格式 , xml通用格式 , html文本格式)(数据类型:整数、字符串、数组、对象)(基础最重要!)

    ajax方法的参数 常用的ajax参数比如url,data,type,包括预期返回类型dataType,发送到服务器的数据的编码类型contentType,成功方法,失败方法,完成方法.除了这些以外还 ...

  6. JSon_零基础_008_将JSon格式的"数组"字符串转换为List集合

    将JSon格式的"数组"字符串转换为List集合. 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“name.values”集合, ...

  7. JSon_零基础_007_将JSon格式的"数组"字符串转换为Java对象"数组"

    将JSon格式的"数组"字符串转换为Java对象"数组". 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“n ...

  8. JSon_零基础_006_将JSon格式的字符串转换为Java对象

    需求: 将JSon格式的字符串转换为Java对象. 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“name.values”集合, 通过get(key ...

  9. JSon_零基础_005_将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面

    将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面 导入jar包: 编写:po(bean)代码: package com.west.webcourse.po; /** * 第 ...

随机推荐

  1. LNMP+Redis架构部署

    工作机制 L(Linux)N(Nginx)M(Mysql)P(PHP)架构想必大家都知道,LNMP架构主要作用是让前端服务与后端存储以及后端的一下服务进行连接起来,来实现php程序的动态请求. 而今天 ...

  2. Eclipse下载安装并运行第一个Hello world(详细)

    Eclipse下载安装并运行第一个Hello world(详细) 1.下载安装和配置JDK JDK详细的安装教程参考:https://www.cnblogs.com/mxxbc/p/11845150. ...

  3. Ansible之系列命令详解

    ansible系列命令有:ansible.ansible-doc.ansible-playbook.ansible-vault.ansible-console.ansible-galaxy.ansib ...

  4. jquery正确获取iframe里元素的方法

    <iframe id="_ae_frame" width="100%" height="100%" frameborder=" ...

  5. PHP代码安全有必要了解下

    攻击者通过构造恶意SQL命令发送到数据库,如果程序未对用户输入的 SQL命令执行判断过滤,那么生成的SQL语句可能会绕过安全性检查,插入其他用于修改后端数据库的语句,并可能执行系统命令,从而对系统造成 ...

  6. CentOS7安装PPTP

    CentOS7安装PPTP VPN(开启firewall防火墙) 1       准备一个CentOS7服务器 2       检查是否支持PPTP && echo ok #返回OK ...

  7. Test Complete 的自动化测试 --- 三角形

    Test Complete 的自动化测试 --- 三角形 PS:工具:Test Complete , OS:win 10 这里做三角形的测试与上一篇博客做计算器的测试大致一样,都是对.exe的执行文件 ...

  8. php相关知识(一)

    php是服务器端脚本语言.可以生成动态页面内容,可以对数据库中的数据库进行编辑. php变量以$符号开始,后面是变量名,变量名以字母或下划线开始,变量名不能包含空格,变量名区分大小写. php的数据类 ...

  9. php使用cUrl方法 get、post请求

    php使用curl方法,请确保已经开启curl扩展.传送门:http://www.cnblogs.com/wgq123/p/7450667.html /**Curl请求get方法 *@$url Str ...

  10. Qt Framework 问题之 framework/Versions/A:bundle format unrecognized, invalid, or unsuitable

    在解决标题提到的问题之后,先来介绍下Qt Framework一些基本知识. 基于QT的Mac端工程,在打包时需要对所有需要嵌入到APP的framework及dylib文件进行手动签名处理. 一.签名处 ...