专栏名称: 爬虫俱乐部
Stata技术控,编程技术咨询,数据讨论与分享,编程和实证培训。
目录
相关文章推荐
中国经营报  ·  热搜第一!替身女演员遭“碾轧” ... ·  2 天前  
煮娱星球  ·  这姐疯了啊? ·  3 天前  
51好读  ›  专栏  ›  爬虫俱乐部

十分钟掌握——批量读取json关键信息

爬虫俱乐部  · 公众号  ·  · 2017-09-05 13:52

正文

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

前两篇推文我们带来了 json文件 的读取利器 jsonio 命令。 顾名思义, jsonio 是关于 json文件 IO input & output ),我们使用 jsonio 命令直接读取 json 文件,就是为了获得比正则表达式更快 的速度和更直观的体验。80年代深圳蛇口有一句口号响彻中国:时间就是金钱,效率就是生命。 jsonio 有着更为便捷多样的 json 读取方式,可以大大提升读取效率,让我们快快拿起。

rv方式批量读取json


在第一篇推文中,我们使用jsonio命令读取文件时,其后跟的是选项 kv (即 jsonio kv ), 它的含义是将json文件以键值对的形式读入进Stata内,而今天我们将换一个读取的形式,它是 rv ,意思是 row-value ,将 json 文件的内容以一行观测值的形式读入。 我们同样以transit.json 文件为例, 这次我们键入命令:

jsonio rv,file(“d:\stataABC\jsonio\transit.json”) ob(1) nourl

list

其中, ob(1) 的意思是将本 json 内容读取到第一行观测值上,如果此时数据集没有第一行观测值,则自动生成。 数据集如下:

这个时候我们看到,键值已经被放置在第一行观测值的各个变量中,那么“键”在哪里?小编只看到了jsonvar这些变量名呀!别急,在stata命令输入窗口键入 des 命令,发现 所有的键名的信息都转成了对应变量的标签。

有的小伙伴就会问了,这么一个选项有什么用呢——当你要做的,不是在一个json文件里提取很多信息,而是在许多json文件里提取某几项信息 它就可以方便地构造循环,急速读取。

elem()——读取指定键值对

jsonio 拥有一个强大的选项—— elem() ,它可以在读取 json 文件时,即按照一定规则过滤筛选所需要的键值对信息,规则简单易懂,我们举个例子说明, 键入如下命令:

clear all

jsonio kv,file(“d:\stataABC\jsonio\transit.json”) nourl elem(“start”)

codebook key

elem(“start”) 表示:读取json文件中键名含有字符串“start”的键值对。 codebook key 表示: 查看数据集,可以看到,读取出来的键值对的键名均含有start,结果为:

而且, elem() 支持正则表达式匹配

clear all

jsonio kv,file(“d:\stataABC\jsonio\transit.json”) nourl   elem(“steps_\d/start_location/lng”)

codebook key

命令提取键名中包含有 steps_\d/start_location/lng 的键值对,其中 \d 是正则表达式的特殊元字符,表示数字0-9。 命令语句: codebook key 查看结果为:

事实上,由 json 存储的文件一般富有极强的规律性(因为大部分 json 文件本身也是计算机批量产生的,为了格式规范易于理解,在键名命名上会非常有规律),因此一些简单的正则表达式,就可以提取出相关的信息。

读取多个json文件的信息

现在我们的手上有5个 json 文件,它们是BaiduMap提供的从湖北省武汉市户部巷到五个武汉市内的地方的导航文件, 其具体地址如下:

它们的名称分别是 rv1.json rv5.json 我们的目的是,提取每个 json 文件中,从起点到终点所需时间这一条信息,有些 json 文件提供了不止一条到达路线(就像我们使用百度地图APP时它会提供多条路线一样),那么也分别记录下来首先我们查看其中的一个 json 文件。 输入命令:

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

得到其中一个 json 文件的键值对描述,如下所示:


我们可以看到, json 文件中关于所需时间的信息,其键名的形式为 /result/routes_#/duration 其中#是第#条路线, 而值这个数字以秒为单位。如果我们想批量读取json文件,则它们的信息必然要以“一行观测值”对应“一个 json 文件”的形式呈现,我们可以使用 jsonio rv 批量读取json文件,使每一个json文件的信息对应一行观测值,首先,我们以第一个json文件为例:

clear all

jsonio rv, file("d:\stataABC\jsonio\rv1.json") nourl elem(“result/routes_\d/duration”) ob(1)

describe

命令要求仅提取 rv1.json 文件中 符合 elem() 要求的信息,即路线耗时信息,并将其输入至第一行观测值中。

可以看到,该文件中有5条路线,因此生成了5个耗时信息。 接着,我们将其放入 forvalues 循环中:

clear all

forvalues i = 1/5{

jsonio rv, file(`"d:\stataABC\jsonio\rv`i'.json"') nourl elem("result/routes_\d/duration") ob(`i')

}

这里,我们循环读取文件夹下的5个 json 文件( rv1.json rv2.json rv5.json ), ob(`i’) 的意思是,将第一个 json 文件对应的信息读入到第一行观测值,第二个 json 文件对应的信息读入到第二行观测值,依次类推。命令窗口输入 br 查看数据集:

且变量的标签为:

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


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

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

文字编辑:高金凤

技术总编:刘贝贝



往期推文推荐:

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

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

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

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

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

6.







请到「今天看啥」查看全文