查看原文
其他

insheetjson:Stata如何读取含有中文的json?(1)

华南师大黎嘉辉 Stata and Python数据分析 2022-03-15

爬虫俱乐部之前推出的线下培训,得到了各位老师的一致好评。为了更加方便大家学习,满足更多Stata用户的学习需求,爬虫俱乐部已隆重推出在线直播课程,请大家奔走相告!课程报名链接:https://ke.qq.com/course/286526#tuin=9735fd2d,详情见推文《爬虫俱乐部隆重推出网上直播课程第一季》



有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

好消息:爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!

近日在给同学整理一些Stata爬虫资料的时候,尝试了一下怎么直接读取json数据。之前的推文(《十分钟明白——json为何物》)也介绍了一个非常方便的命令jsonio来读取json数据。但是我在使用这个命令时遇到了很多问题:一是这个命令并不能读取过多的数据(甚至是用这个命令导出的数据都不能用这个命令导入),二是这个命令在读取json时并不支持中文,读取后会出现乱码。

今天我们要介绍的新命令是insheetjson,与jsonio不同,insheetjson采用mata的方式读取json文件,而非java的方式。因此,这个命令可以直接读取与解析中文字符而不会产生乱码。insheetjson可以通过ssc install的方式进行安装,安装前还需要先安装libjson,安装命令如下:

ssc install libjson

ssc install insheetjson

insheetjson的使用方法大体可以分为两个,一是查看json文件,二是读取json文件。

一、下载json格式数据

以环保部数据中心广东空气质量数据为例,先看一下该数据的基本结构:网址:http://datacenter.mep.gov.cn/websjzx/envaround/ajaxApi/getCityDataList.vm?regionCode=440100&type=aqi

我们将以上网站的内容直接复制进txt文本文件中,将其重命名为“aqi_gz.json”文件链接(https://github.com/Stata-Club/Sharing-Center-of-Stata-Club/blob/master/article/aqi_gz.json?raw=true)。需要注意的是,并不一定需要将json结构的数据保存为json文件,保存为txt文件依然可以正常读取,只要数据格式是json结构的就能成功读取。如果出现中文乱码时,可以使用unicode进行转码。

二、查看json格式数据

在insheetjson后加using “filename”用以指定需要读取的json格式文件,在逗号后添加选项showresponse可以查看json数据。使用showresponse方式查看数据不会将json数据读入到stata中,仅仅是将数据显示到stata窗口中。

insheetjson using "aqi_gz.json" , showresponse // 查看json数据

查看json数据还有另一种方式,在选项中加入flatten选项可以以键值对的形式显示json数据。

insheetjson using "aqi_gz.json" , showresponse flatten

“list:1:REGIONNAME”就是“键”,意思是list下第1个REGIONNAME,其“值”为广州。

三、以table方式读取数据

采取这种方式可以将json数据读取为我们常见的stata数据格式。读取数据前需要先创建几个变量来储存你要读取的信息,例如我需要储存经纬度、空气质量等级、AQI和地区名。创建变量时要创建长一点的字符变量如str80,如果变量太短了会导致数据不能完整读取。

table方式读取数据

gen str80 lat = ""

gen str80 qua = ""

gen str80 lng = ""

gen str80 aqi = ""

gen str80 region = ""

insheetjson lat qua lng aqi region using "aqi_gz.json", ///

    table(list) col("LAT" "QUALITY" "ING" "AQI" "REGIONNAME") replace

compress

以table方式读取json数据基本语法为:

insheetjson varlist using filename , table(string) col(string)

varlist填写的是你刚刚创建的变量列表。table里面填写的是你想读取数据的上一级的名称,例如在这个AQI数据中,想要读取AQI数据的上一级名称是list。col填写的是在list下你想要读取的变量,这个col里面填写变量的顺序要与前面varlist变量的顺序相一致。

读取完成后利用命令compress压缩数据,最后结果就为:

四、读取json中的某个值

有时我们需要读取json中的某个值,例如请求时间、数据格式等。刚刚的AQI数据中最后一个变量记录了数据的类型“type:aqi”。

先利用下列命令查看结构:

insheetjson using "aqi_gz.json" , showresponse flatten

在col中填入等号前完整的键就可以了生成这个值了,这时不放table选项:

gen str80 type = "" // 读入json中type对应的值

insheetjson type using "aqi_gz.json", ///

    col("type")

compress

gen str80 yf = "" // 读入云浮

insheetjson yf using "aqi_gz.json", ///

    col("list:21:REGIONNAME")

compress

今天的推文介绍了stata如何查看和读取json格式数据,下一期推文将介绍insheetjson读取json数据的其他方式。

注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

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

-文字编辑:吴晓蔓-

-技术总编:刘贝贝-

往期推文推荐:

1.爬虫俱乐部新版块--和我们一起学习Python

2.hello,MySQL--Stata连接MySQL数据库

3.hello,MySQL--odbcload读取MySQL数据

4.再爬俱乐部网站,推文目录大放送!

5.用Stata生成二维码—我的心思你来扫

6.Hello,MySQL-odbc exec查询与更新

7.Python第一天

8.Python第二天

9.事件研究大放送

10.爬虫俱乐部隆重推出网上直播课程第一季



关于我们

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

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

投稿邮箱:statatraining@163.com

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

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存