关注开源中国好久了,可是一直没有发表过博客,缘由是以为本身能力还不够,由于这里的人们都让我仰望啊。一直在CSDN坚守着,可是,最近却总以为那里气氛不对,遂来到了这里,来发表本身的见解,还有本身的学习笔记。 json
工做中使用的是go语言,其实本身学习的也不是很深刻,只是勉强能够用来编几行代码,出了问题仍是要跟API求救,曾设想过去读源码,可是却一直没有决心,幸亏有不少testcase,提供了调用函数的方法。 数组
花了好长时间,老是没有办法把我定义的文件decode了,把struct改了无数遍,运行testcase确实是正确的,一到个人程序就不行了。我都要打算放弃的时候,忽然注意到了一件事情,示例中的Key都是大写的,我有种恍然大悟的感受。毕竟为了简洁,go省去了好多关键字,像public,private这样的关键字都用大小写,因此,在go中,大小写应该会有不一样寻常的含义。果真,把testcase中的大写改为小写,同时把定义中的大写改为小写,确实,就读不出来了,真是的,浪费了我一个下午的时间来看json的全部testcase。 函数
除了上面说的,必需要把字段的key首字母大写外,还有一个问题也值得重视。若是把本身当成是这个方法,会去怎样解析呢?固然,要按照结构去解析,那由于json格式的数据可能顺序不是固定的,也许在某些数据项中某些key的位置也不固定,那怎样去匹配呢,经过变量名,也就是在指定这个结构的时候,将每一个属性名定义为与json中的key名相同。(上述都是我猜的,没有看过源码)好比说, 学习
[ {"Name":"alias","Age":11},{"Age":22,"Name":"lucy"}] spa
若是要定义与之相同的结构, code
typre student struct{ 源码
Name string 博客
Age int string
} test
在这里,无论是json数据的定义仍是struct中的定义,凡是首字母小写就没有办法按照咱们定义的结构区组织数据。
固然,咱们也能够使用嵌套的,例如:
{“Age”:11,"Name":"Jessica","Course":{"Eng":85,"Math":90}}
那咱们结构体的定义就能够调整为:
type score struct{
Eng int
Math int
}
type scorelist struct{
Name string
Age int
Course *score
}
对于有多条的状况,使用数组就能够了。结构体定义好以后,直接调用json的Unmarshal方法就Ok了。
第一个参数是[]byte,须要将json数据转换成byte数组,第二个参数是咱们定义的结构。