首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将JSON转换为CSV(数据帧)时出现的问题

将JSON转换为CSV(数据帧)时出现的问题
EN

Stack Overflow用户
提问于 2016-03-19 11:47:22
回答 1查看 247关注 0票数 1

我正在尝试使用R中的jsonlite包将以下JSON文件转换为CSV (数据帧)。我无法这样做。我正在寻找一个通用的方法,可以解析任何复杂性和嵌套的JSON

代码语言:javascript
运行
复制
library(jsonlite)
fromJSON(json_file)

JSON文件:

代码语言:javascript
运行
复制
{
 "IRD": {
 "INTV": {
 "INTVStatus": "SERV_HST",
"RD": {
 "U": "kWh",
"BEV": "0.0379",
"Val": "0",
"RV": "0",
"port": "1" 
},
"RD": {
 "U": "kWh",
"BEV": "0.0379",
"Val": "0",
"RV": "0",
"port": "2" 
},
"RD": {
 "U": "Vrms",
"BEV": "231.0000",
"Val": "231.0000",
"RV": "231",
"port": "3" 
},
".attrs": {
 "GatewayCollectedTime": "2015-12-21T12:05:02.257-05:00",
"INTVSequenceNumber": "47112",
"BlockSequenceNumber": "0",
"EndTime": "2015-12-21T10:00:00.000-05:00" 
} 
},
"INTV": {
 "INTVStatus": "SERV_HST",
"RD": {
 "U": "kWh",
"BEV": "0.0379",
"Val": "0",
"RV": "0",
"port": "1" 
},
"RD": {
 "U": "kWh",
"BEV": "0.0379",
"Val": "0",
"RV": "0",
"port": "2" 
},
"RD": {
 "U": "Vrms",
"BEV": "231.0000",
"Val": "231.0000",
"RV": "231",
"port": "3" 
},
".attrs": {
 "GatewayCollectedTime": "2015-12-21T12:05:02.257-05:00",
"INTVSequenceNumber": "47113",
"BlockSequenceNumber": "0",
"EndTime": "2015-12-21T11:00:00.000-05:00" 
} 
},
"INTV": {
 "INTVStatus": "SERV_HST",
"RD": {
 "U": "kWh",
"BEV": "0.0379",
"Val": "0",
"RV": "0",
"port": "1" 
},
"RD": {
 "U": "kWh",
"BEV": "0.0379",
"Val": "0",
"RV": "0",
"port": "2" 
},
"RD": {
 "U": "Vrms",
"BEV": "231.0000",
"Val": "231.0000",
"RV": "231",
"port": "3" 
},
".attrs": {
 "GatewayCollectedTime": "2015-12-21T12:05:02.257-05:00",
"INTVSequenceNumber": "47114",
"BlockSequenceNumber": "0",
"EndTime": "2015-12-  21T12:00:00.000-05:00" 
} 
},
".attrs": {
 "NumberINTVs": "3",
"EndTime": "2015-12-21T12:00:00.000-05:00",
"StartTime": "2015-   12-21T09:00:00.000-05:00",
"INTVLength": "60" 
} 
},
".attrs": {
 "Version": "2.0",
"DocumentID": "aebjjjjd-59de-4405-ac0b-50e33b0b4f4b-1",
"JobID": "3354",
"ExportID": "aeb5bf7d-59de-4405-er0b-50e33b0b4f4b",
"RunID": "20430452",
"CreationTime": "2015-12-21T13:55:00.807-05:00",
"StartTime": "2015-12-21T09:55:00.000-  05:00",
"EndTime": "2015-12-21T13:55:00.000-05:00" 
} 
}
EN

回答 1

Stack Overflow用户

发布于 2016-03-20 06:36:00

根据JSON的多重嵌套结构,可以考虑逐级解析JSON (job/document、INTV、RD和attrs),然后将它们绑定到一个数据帧中:

代码语言:javascript
运行
复制
library(jsonlite)

# READ IN JSON FILE INTO NESTED LIST
ird <- do.call(rbind,
               lapply(paste(
                      readLines("JSONFile.json", warn=FALSE),
                      collapse=""), 
               jsonlite::fromJSON))    
# JOB
job <- list(ird[[2]])

# INVSTATUS
intvstatus <- lapply(1:3, function(i) ird[[1]][i]$INTV$INTVStatus)

# RDs (nested lapply for three RDs per three INTVs)
rds <- lapply(1:3, function(i)
                   do.call(rbind, lapply(2:4, 
                                  function(j) ird[[1]][i]$INTV[j]$RD)
                           )
              )    
# ATTRS
attrs <- lapply(1:3, function(i) ird[[1]][i]$INTV$.attrs)

# BINDING EACH LIST TO FINAL DF (rep() to repeat for each 9 RDs)
df <- data.frame(do.call(rbind, rep(job,9)),
                 INTVStatus = do.call(rbind, rep(intvstatus, 3)),
                 do.call(rbind, rds),
                 do.call(rbind, rep(attrs,3)),
                 stringsAsFactors=FALSE)
# TO FLATTEN LISTS OUTPUT FROM DO CALLS
df <- data.frame(lapply(df, as.character), stringsAsFactors=FALSE)

# OUTPUT TO CSV
write.csv(df, 'Output.csv')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36097587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档