博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go处理json格式文件
阅读量:6715 次
发布时间:2019-06-25

本文共 1155 字,大约阅读时间需要 3 分钟。

hot3.png

        关注开源中国很久了,但是一直没有发表过博客,原因是觉得自己能力还不够,因为这里的人们都让我仰望啊。一直在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数组,第二个参数是我们定义的结构。

 

转载于:https://my.oschina.net/u/150469/blog/134636

你可能感兴趣的文章
【机器学习】--xgboost初始之代码实现分类
查看>>
golang ubuntu开发环境
查看>>
ArcGIS Server 10.2 实战(三)图层标注及图例中文显示乱码的解决
查看>>
Win7关机时弹出对话框,提示你想要的信息
查看>>
Linux初学(三)
查看>>
java中的链式编程
查看>>
正确率、召回率、F值
查看>>
kuangbin专题十二 HDU1078 FatMouse and Cheese )(dp + dfs 记忆化搜索)
查看>>
多行文本超出显示省略号
查看>>
转载~基于比较的排序算法的最优下界为什么是O(nlogn)
查看>>
在本机通过SQL远程操作数据库
查看>>
StringMVC返回字符串
查看>>
Windows完成端口网络模型
查看>>
CSS Hack整理
查看>>
leetcode 28. Implement strStr()
查看>>
nginx 服务器重启命令,关闭 (转)
查看>>
实用的正则表达式
查看>>
Hibernate中Criteria的完整用法
查看>>
LINUX创建用户的命令
查看>>
Spring MVC 学习总结(一)——MVC概要与环境配置 转载自【张果】博客
查看>>