今天在工作中在调用办法时,回来的是一个json格局的数据,在这儿记录一下如何解析这个json,获取里边想要的数据。
这儿调用的是一个办法如下:
DataResultdataResult=authServiceClient.queryUserByUserId(Long.parseLong(userId));
回来的dataResult格局如下(再插入一张图片吧,更直观一些,格局是一样的,不要在乎数据是否共同):
{
“isSuccessful”:true,
“result”:{
“bizSeqNo”:“19101720001015300118160256043161”,
“code”:“0”,
“faceId”:“717fc2a9f097aaff35c79ef5570b5017”,
“msg”:“请求成功”,
“orderNo”:“db2ab07091284b9d8df3e337f6130669”,
“sign”:“13E1BDDC039EB5DCFA4FF0C2021A864B9FC0BD73”,
“transactionTime”:“20191017181602”
},
“status”:{
“statusCode”:“000000”
}
}
那怎样获取里边的数据呢?
1,先将dataResult转换成String字符串
Strings=JSONObject.toJSONString(dataResult);
2,然后将String字符串转换成json目标,获取最外层的值
JSONObjectresult=JSONObject.parseObject(s).getJSONObject(“result”);
最后就是获取最里层的值
StringrealName=result.getString(“realName”);
这样就获取到了最里边的值了。
如何解析json文件数据
因为剖析的数据格局为JSON格局,既占空间,并且剖析时也非常的不方便,所以,咱们需求对JSON格局
的数据进行解析,使其符合R言语剖析所需求的数据格局,如data.frame,list等。
在R言语的包库中,现已有人对JSON格局的解析做了完整的包jsonlite,这极大地减轻了剖析人员的工作压力。
jsonlite包中有以下几个函数
1、flatten
其间flatten函数是用来处理JSON中含有内嵌表格的状况,这种JSON文件解析为data.frame时,会在data.frame中
的某一列或多个列中别的包括一个data.frame。flatten函数能够将这种data.frame转换为一个2维的列表结构。通俗
点讲,便是讲内嵌表格的特点作为外置大表格的特点,组成一个维数变大了的表格。例如
上图的x表格,stats为一个内嵌表格,具有3个特点。
通过flatten(x)函数转化后,变为一个表格
2、prettify,minify
prettify是一个美化函数,对json密集的json格局,通过添加空白,对格局进行标准化,这样咱们在调查json数据时会比较方便。
例如:
minify是一个压缩函数,与prettify做的工作正好相反,其效果如下
这两个函数运用都非常简略,仅需求一个JSON对象即可,能够从toJSON函数获得
3、rbind.pages
这是一个兼并函数,依据官方文档的说法,它能够将多个data.frame兼并为1个data.frame。
这个函数非常只能,能够自动识别多个data.frame的特点是否相同,若相同,则按行兼并,若不同,则将相同的地方按行兼并,不同的特点按列兼并
例如:
x<-data.frame(foo=rnorm(3),bar=c(TRUE,FALSE,TRUE))
y<-data.frame(foo=rnorm(2),bar=c(“blue”,”red”))
rbind.pages(list(x,y))
直接按行兼并了。
x<-data.frame(foo=rnorm(3),bar=c(TRUE,FALSE,TRUE))
y<-data.frame(foo=rnorm(2),col=c(“blue”,”red”))
rbind.pages(list(x,y))
对foo按行兼并了,而col特点是依照列兼并的,没有的部分用NA替代。
4、serializeJSON
将一个R的对象序列化为一个JSON数据集。
5、stream_in,stream_out
利用流文件来处理JSON格局的数据解析使命。这种办法能够针对数据量非常大的状况。
stream_in(con,handler,pagesize=500,verbose=TRUE,…)
其间con为一个连接对象,能够是一个网络ur,也能够是一个文件途径
handler是一个自定义函数,pagesize用来指定咱们从文件中要读取的文件行数。
verbose=T,设置是否打印出处理行数
stream_out(x,con=stdout(),pagesize=500,verbose=TRUE,…)
x为一个需求输出为json数据集的对象,目前只支持data.frame
5、toJSON,fromJSON
与stream_in和stream_out的功用类似,toJSON是转化为JSON格局,fromJSON是将JSON格局数据集转化为
R中的格局,一般为list.
具体运用办法能够查帮助文档。
其间fromJSON在读取多行JSON数据时会报错,只能单行读取数据。
总结
进行JSON格局数据解析时,没有特殊要求,建议运用stream_in函数。假如希望依照自己的想法来解析,能够运用fromJSON
按行解析,然后对字符串依照自己的想法处理,如加密,解密等。