十分钟明白——json为何物

2017-08-31 张学人 爬虫俱乐部 爬虫俱乐部

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

诸君在爬取网页或者处理网页数据时,会经常遇见格式为json的 文本文件,过往我们如果想从中提取重要信息,往往是用上一串很复杂的正则表达式来匹配。每每此时,小编就会想起Jamie Zawinski的一句名言“如果你要用正则表达式处理问题,那么现在你就有了两个问题”——将自己从正则表达式里解放出来吧——至少在遇到的文件格式是 json时。本期将介绍一个如何让stata读取和输出json文件的命令: jsonio

一.正本清源——什么是json

在回答什么是json以前,我们先思考这样一个问题:我们如何描述一份非结构化的信息,比方说小编与朋友们出去吃小龙虾,我们需要描述那天天气如何,去了几个人,吃了什么东西,每位小伙伴觉得口味怎样,类似这样的问题有很多,我们应该如何规范地记录它们?

计算机已经给出了它的答案,所有的非结构化信息可以用两种句式进行概括:①什么东西有什么  ②什么东西是什么

比如这次吃小龙虾,那么可以写成

吃小龙虾:{

天气:晴天,

成员:[小编,白富美,高富帅],

花费:233元,

菜品:[好吃的,好吃的,还是好吃的],

}

如此一来,所有此类信息都可以用此模板记录下来,我们说:吃小龙虾这个词汇对应的大括号的内容,是“吃小龙虾”有什么,而天气这个词汇对应的“晴天”代表天气是什么。

这种格式的数据就是json

Json是一种轻量级的数据交换格式,人好认,计算机也好解析,它的全称虽然是JavaScript Object Notation,但可以完全脱离javascript使用,是理想的数据存取语言。在上述的例子中,所有的信息本质上都以键值对的 形式记录了下来,如:天气是什么,花费是什么,而诸多键值对会被一个花括号涵盖住,我们称花括号及里面的内容为一个对象,即一个对象中包含多个键值 对,json的灵活之处就在于,虽然键值对的“键”(例如:“天气”、“成员”)必须为字符串,但是键值对的“值”(“晴天”“233元”)不仅可以是数 值,字符串,甚至也可以是一个对象,子子孙孙无穷匮也,无论多么复杂的信息集合也可以合适地表现出来。

二.Jsonio 轻松读取json文件至Stata内

Jsonio是一项外部命令,安装时输入ssc install jsonio,我们下载的内容是ado文件以及相应的jsonio.jar包,jsonio命令的json解析部分由Java代码完成,故计算机需要安装JRE(java runtime environment)以使Java程序可以在计算机内执行。

JRE的安装十分简便,直接访问http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html   进入oracle官网,如果电脑是64位,则安装x64,如果是32位,则安装x86,如果不清楚自己的电脑是哪一种,可以右键我的电脑查看属性。小编的电脑是64位,因此下载最后一项windows x64,32位的系统下载windows x86(倒数第三个)。

下载完毕直接一路点击安装即可。

现在我们以一份百度地图API返回给我们的json文件为例,这个json文件告诉了我们如何从湖南大学乘坐公共交通抵达北京大学。

输入如下命令:

clear all

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

其中,file中填写的是json文件的本地路径名,nourl表示该路径是本地路径而非网络地址,kv表示 key-value ,读取的数据将以键值对形式返回,即数据集只存在两个变量:一.键  二.值

在读取前,json文件是这个样子

读取至Stata中

可以看出,程序为了保证每一个键的唯一性,为每一个相同的键名(如”lng”在json原文件中出现了不止一次)加入扩展名,在数据集里,value要么是数值,要么是字符串,遗憾的是,因为java代码读取的编码问题,jsonio命令不能支持中文字符显示。如果在json文件中,键值对的“值”本身也是对象(用花括号括起来的,容纳多个键值对的结构),则会被继续拆开解析,一直到“值”不再是对象为止。(我们将会在下一篇推文中详细介绍)

本次关于jsonio的介绍就到这里,后续的推文我们将继续介绍有关jsonio更多强大的选项,我们的目标是:Stata的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分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部

微信扫一扫
关注该公众号