go处理json格式文件

lunar_stud · · 3279 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

        关注开源中国很久了,但是一直没有发表过博客,原因是觉得自己能力还不够,因为这里的人们都让我仰望啊。一直在CSDN坚守着,但是,最近却总觉得那里气氛不对,遂来到了这里,来发表自己的看法,还有自己的学习笔记。

       工作中使用的是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"}]

如果要定义与之相同的结构,

typre student struct{

Name string

Age int

}

在这里,不管是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数组,第二个参数是我们定义的结构。

 

本文来自:开源中国博客

感谢作者:lunar_stud

查看原文:go处理json格式文件

入群交流(和以上内容无关):Go中文网 QQ 交流群:729884609 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

3279 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传