文档章节

go处理json格式文件

lunar_stud
 lunar_stud
发布于 2013/05/30 18:30
字数 734
阅读 1504
收藏 21

        关注开源中国很久了,但是一直没有发表过博客,原因是觉得自己能力还不够,因为这里的人们都让我仰望啊。一直在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
粉丝 3
博文 13
码字总数 4489
作品 0
海淀
程序员
私信 提问
加载中

评论(7)

lunar_stud
lunar_stud 博主

引用来自“sidbusy”的评论

楼主肯定连go tour都没看...

我看的the way to go,不过好多零碎的东西都是用的时候才查
sidbusy
sidbusy
楼主肯定连go tour都没看...
西门飞
西门飞

引用来自“lunar_stud”的评论

引用来自“西门飞”的评论

楼主公司用go做什么

你的头像是不是《魔幻手机》中的陆小千啊

哈哈 被你识破了
lunar_stud
lunar_stud 博主

引用来自“西门飞”的评论

楼主公司用go做什么

你的头像是不是《魔幻手机》中的陆小千啊
西门飞
西门飞
楼主公司用go做什么
lunar_stud
lunar_stud 博主

引用来自“独孤小败”的评论

楼主哪个公司啊,都用go 啦

哪个公司不方便透露,虽然接触了好几个月了,但对于go还是有很多东西没有琢磨清楚。
独孤小败
独孤小败
楼主哪个公司啊,都用go 啦
23. 23. Python Json转换

JSON ==> Javascript Object Notation AJAX 就是一种 key:value 的形式 json有四种方法: json.loads json.dumps 理解:加s的是用来处理字符串的 json.load json.dump 理解:不加s的是用来处...

ln286577399
2017/11/13
0
0
我所理解的json和jsonp

一,json json是什么我就不过多阐述,我们利用ajax很多时候都是拿到json格式数据,然后结合dom显示到页面到中,所以json是一种数据格式,并且我们可以把他的形态写出来: var jsondata=[ {'a...

透笔度
2016/03/25
242
0
教程:Data Lake Analytics + OSS数据文件格式处理大全

0. 前言 Data Lake Analytics是Serverless化的云上交互式查询分析服务。用户可以使用标准的SQL语句,对存储在OSS、TableStore上的数据无需移动,直接进行查询分析。 目前该产品已经正式登陆阿...

金络
2018/08/07
0
0
SpringMVC转换JSON数据(1)

SpringMVC提供了处理JSON格式请求/响应的 HttpMessageConverter:MappingJackson2HttpMessageConverter。利用Jackson开源类包处理JSON格式的请求或响应消息。 我们需要做的: 在Spring容器中为...

武小猪
2018/06/26
0
0
spring框架 Request请求 content-Type设置和配置

1. Content-Type MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。 常见的媒体格式类型如下:...

ybyron
2017/08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微服务架构一直火,为什么服务化要搞懂?

微服务架构,这 5 年左右一直被认可,是软件架构的未来方向。需要大家理解的是,为什么需要服务化。比如微服务架构对企业来说,带来什么价值?有啥弊端? 这里浅谈一下微服务架构,主要还是在...

泥瓦匠BYSocket
36分钟前
3
0
总结:单机与分布式

传统计算方案演变 1、单机并行运算 1,打开数据源 2,统计出有多少个文件。 3,为每个文件执行相同的统计命令 4,等待所有命令执行成功。 5,合并统计后结果输出或执行进一步统计 2、分布式并...

浮躁的码农
47分钟前
5
0
关于怎么解决CENTOS7没有ETH0网卡这个问题

CentOS7系统安装完毕之后,输入ifconfig命令发现没有eth0,不符合我们的习惯。而且也无法远程ssh连接。 1.进入目录/etc/sysconfig/network-scripts/ 2.将文件ifcfg-ens33重命名为ifcfg-eth0;...

无名氏的程序员
53分钟前
5
0
HTML5 Web Storage 存储介绍

Web Storage是HTML5 API提供一个新的重要的特性; 最新的Web Storage草案中提到,在web客户端可用html5 API,以Key-Value形式来进行数据持久存储; 目前主要的浏览器已经支持该功能: 常见的...

前端老手
今天
5
0
安装mxnet出现的错误

我出现下面的错误:是因为我前面的安装步骤都正确,只是这一步出现错误,sudo python setup.py install 其实我看了下我默认的python是3.6,是大于3.5 ,改为sudo python3 setup.py install就...

南桥北木
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部