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. Python 基础 三 反射

    Python 基础 三 反射 今天我们先介绍一下反射这个概念,啥是反射?反射就是自己检测自己.在我们Python的面向对象中的反射是啥意思呢?就是通过字符串的形式操作对象相关的属性.python中的一 ...

  2. Linux服务器更改Apache2默认页面

    方式一 获取root权限 su root //或者 sudo -i 进入 /var/www目录下 cd /var/www 创建目录 mkdir -m 777 myhtml // myhtml为自己创建 ...

  3. Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)

    1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.到今天为止,大功即将告成:框架所需要的代码实现都基本完成. 2.data数据封装 2.1使用背景 在实际项目过程 ...

  4. 【Java】final修饰符的使用

    final修饰符的使用 1.修饰类: final修饰的类不能被继承,final修饰的类里面的方法都是(隐式)final方法 2.修饰方法: final修饰的方法不能被重写 3.修饰变量(被修饰的变量一 ...

  5. ArcGIS API For Javascript :读取 CSV 文件的方法

    我们临时会遇到一些测试数据,通常从数据库中以 CSV 格式导出.最简单实用的方法就是使用 ajax 去读取文件,记得引入 jQuery . 例如,在<ArcGIS JS API :新增一个热力图 ...

  6. ArcGIS API For Javascript:新增热力图层的方法

    当我们要制作一个热力图层,可以通过以下 3 步来实现: 引入类 在 require 中需引入 "esri/layers/FeatureLayer", "esri/rend ...

  7. 大公司 vs 小公司,你会选哪个?

    找工作跟找对象差不多,在确立关系领证前,彼此要多些了解.在了解的基础上,你再确认是否真心喜欢对方,彼此身上有没有相互吸引的特质,两个人的性格是否互补.三观是否匹配.契合度越高,往后才能相互扶持.彼此成 ...

  8. 并行模式之Guarded Suspension模式

    并行模式之Guarded Suspension模式 一).Guarded Suspension: 保护暂存模式 应用场景:当多个客户进程去请求服务进程时,客户进程的请求速度比服务进程处里请求的速度快, ...

  9. cnpm镜像安装

    npm install -g cnpm --registry=https://registry.npm.taobao.org

  10. IEnumerable和IEnumerator详解

    引言 IEnumerable是可枚举的所有非泛型集合的基接口, IEnumerable包含一个方法GetEnumerator(),该方法返回一个IEnumerator:IEnumerator提供通过C ...