json格式预览:
{{data{
rows{
}
.......
{
} }
}}
.......
{{data{
rows{
}
......
{
} }
}}
简述:
其中一个data列表为一级数据,一个rows列表为二级数据,rows列表内为三级数据
该json文件中包含多层一级数据,各个一级数据中仅包含一层二级数据,各个二级数据中包含多层二级数据
单个文件格式转化
% 加载所需模块
install.packages("rjson")
library("rjson")
library("plyr")
% file=json文件所在路径
jdata<- fromJSON(file="C:\\Users\\ThinkPad\\Desktop\\1.json")
% 导出一层一级数据
jd<-jdata[[1]]$data$rows
jdfs<-lapply(jd,function(j){
as.data.frame(j)
})
jdf<-rbind.fill(jdfs)
% file=导出csv文件的存储路径,sep设置","为分隔符,row.names=F设置没有行名,col.names默认第一行为列名
write.table(jdf,file="C:\\Users\\ThinkPad\\Desktop\\1.csv",sep=",",row.names=FALSE)
批量转化
% 加载转换json文件所需模块
install.packages("rjson")
install.packages("plyr")
library("rjson")
library("plyr")
% 加载导出/写入文件模块
library("readr")
% n=文件个数
n=100
for(i in 1:n)
{
% 此处json文件名为编号1至n
x_name<-paste("C:\\Users\\ThinkPad\\Desktop\",i,sep="")
% 导入json文件路径
file_name<-paste(x_name,"json",sep=".")
% 转出csv此处json文件名为编号1至n
y_name<-paste("C:\\Users\\ThinkPad\\Desktop\\",i,sep="")
% 转出csv文件路径
ex_name<-paste(y_name,"csv",sep=".")
% 导入json文件
jdata<-fromJSON(file=file_name)
% 获取json文件中一级数据的层数
num=length(jdata)
% 设置循环,获取各层一级数据
for (j in 1:num)
{
% 获取各层三级数据
jd<-jdata[[j]]$data$rows
% 将三级数据转化为数据框格式
jdfs<-lapply(jd,function(k)
{
as.data.frame(k)})
% 将数据框格式的各层三级数据按列组合
jdf<-rbind.fill(jdfs)
% 确保输出的数据为数据库格式
jdf<-as.data.frame(jdf)
% write_excel_csv()函数可以保证存储汉字不会乱码
% append=0时,数据直接覆盖原有文件数据;=1时,在原文件后增加数据
% col_names=0时,首行不为列名;=1时,首行为列名
write_excel_csv(jdf,path=ex_name,append=!!(j-1),col_names=!(j-1))
}
}