十分钟理解——Jsonio的键名读取原理

2017-09-01 张学人 爬虫俱乐部 爬虫俱乐部

大大大大大新闻————自公众号推送视频讲解环节以来,深受广大读者朋友的喜爱。近日向我们提问的粉丝也是大幅增加呐!为了便捷管理相关信息,提高工作效率,我们对提问方式做了略微调整哟~提问者需点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

在我们上一次的“十分钟明白-Jsonio为何物”中,小编介绍了jsonio的相关知识,看起来和Stata的关系不大,实则为我们深入理解jsonio命令铺垫了很好的基础,温故而知新,在开始今天的例子之前,牢牢记住关于json特性的三句话

1

Json是存储信息的一种标记方法,它的本质是将信息以键值对表示

2

Json所说的对象就像Python的字典,包含着许多键值对

3

Json的键值对中,只能是字符串,而可以是数字、字符串、数组甚至一个对象

一、Jsonio解析json键名的原理

在上一期的文章中,小编将transit.json在本地读取如下,命令:

 jsonio kv,file("d:\stataABC\jsonio\transit.json") nourl

 nourl 表示文件路径名为本地文件  file(“”)给出json文件的本地路径。

而如果我们打开transit.json文件,可以看见前几行相应的键值对却并不是这样:

原本简洁的键值对为什么会变成了Stata数据集里的一大串字符串键呢

我们举一个例子来解释:我们观察第9个键值对,可以看见它在json中表示北京市的经度(longitude)

虽然在json文件中,代表目的地经度值的是一个简单的键值对:

但是我们把范围扩大一些,发现这个键值对是在location对应的对象内的。

再然后,这个location所在的键值对,又是destination对应的对象内的。

这样一路追踪过去,最后追踪到了“根”键值对 result上。result:object 这个键值对处于json文件最外部的花括号内,也就没有了上级对象。因此,jsonio在解析json文件时,当遇到键值是一个对象时(如destination的值是一个对象),解析该对象,把该对象的键名(destination)写在目标键名(如/result/origin变成了/result/origin/destination)中。

一直解析到键值不再是“对象”为止,此时这一长串字符串就是解析后的键名。如果遇到名称可能重复的键名,jsonio还会给其加上_#(#代表第几个)的尾标,以使得解析后的每一个键名都不同。

二、举一个栗子

关于上一段键值键名傻傻看不清楚的论述,我们举一个栗子。

jsonio解析第9个观察值(北京市的经度)时,假设一开始键名为空,它首先遇到 result:{}这样一个键值对,因为键值为一个对象,且目标在对象里,因此/result不是最终键名,继续在该对象里检索,有一个 destination:{},因此将/destination写入键名,变成/result/destination,此时还不是最终键名,在destination对应的对象里,还有location:{},第9个观察值的值就在这里面,键名变成/result/destination/location,最后我们遇见了目标键值对:  lng:116.316163685,因此最后的键名就是/result/destination/location/lng  而是116.316163685。

三、快速获取——利用Json文件特点

通过jsonio直 接读入json文件,我们可以使用很多非常简单的方式获得我们想要的信息,比如,我们想直接获得本次旅途一路上的经纬度坐标,且我们知道,这个json文 件中关于该类信息的键名都是且只是“path”这是json文件为了保证规范性的书写特点,一种类型的信息会使用相同的键名,我们就可以在读入json文 件后直接键入命令:

keep if ustrregexm(key,”path$”)

我们就可以得到本次旅途经过的大致经纬度坐标:

四、结语

Jsonio因为有规范性和批量化产生的特点,因此在格式上有着很强的特点:相同类型的信息会使用相同的键名,同一类次的信息会出现在同一目录下,在明白了jsonio产生键名的原理后,利用这些特性,我们提取json中信息的效率会特别地高效。关于jsonio如何更多样、更快速地提取json中的信息,我们会在下一期中详细讲述,小伙伴们再见!

什么?!没看懂!!不要紧!!戳下面,听爬虫小将的详细讲解,也欢迎大家的批评指正哟!


以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

                        文字编辑:徐露露

技术总编:刘贝贝



往期推文推荐:

1.高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.命令sum2docx输出统计量表到docx文件

4.reg2docx报告你的实证结果吧!

5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件

6.putdocx+wordconvert—将实证结果输出到Word.docx)文档

7.Stata 15Markdown——没有做不到,只有想不到!

8.矩阵和宏的故事

9.shelloutopen anything

10.Putpdf--神奇的转换工具



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部



微信扫一扫
关注该公众号