首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得嵌套值Rjson

如何获得嵌套值Rjson
EN

Stack Overflow用户
提问于 2014-12-01 11:16:44
回答 2查看 288关注 0票数 1

我的数据看上去

代码语言:javascript
复制
structure(list(`_id` = c(2653L, 2729L, 2920L, 2921L, 2922L, 2923L
), name = c("RunningApplicationsProbe", "RunningApplicationsProbe", 
"RunningApplicationsProbe", "RunningApplicationsProbe", "RunningApplicationsProbe", 
"RunningApplicationsProbe"), timestamp = c(1404116791.097, 1404116803.554, 
1404116805.61, 1404116814.795, 1404116830.116, 1404116868.244
), value = c("{\"duration\":12.401,\"taskInfo\":{\"baseIntent\":{\"mAction\":\"android.intent.action.MAIN\",\"mCategories\":[\"android.intent.category.LAUNCHER\"],\"mComponent\":{\"mClass\":\"kr.ac.jnu.netsys.MainActivity\",\"mPackage\":\"edu.mit.media.funf.wifiscanner\"},\"mFlags\":268435456,\"mPackage\":\"edu.mit.media.funf.wifiscanner\",\"mWindowMode\":0},\"id\":102,\"persistentId\":102},\"timestamp\":1404116791.097}", 
"{\"duration\":2.055,\"taskInfo\":{\"baseIntent\":{\"mAction\":\"android.intent.action.MAIN\",\"mCategories\":[\"android.intent.category.LAUNCHER\"],\"mComponent\":{\"mClass\":\"com.nhn.android.search.ui.pages.SearchHomePage\",\"mPackage\":\"com.nhn.android.search\"},\"mFlags\":270532608,\"mWindowMode\":0},\"id\":97,\"persistentId\":97},\"timestamp\":1404116803.554}", 
"{\"duration\":9.183,\"taskInfo\":{\"baseIntent\":{\"mAction\":\"android.intent.action.MAIN\",\"mCategories\":[\"android.intent.category.HOME\"],\"mComponent\":{\"mClass\":\"com.buzzpia.aqua.launcher.LauncherActivity\",\"mPackage\":\"com.buzzpia.aqua.launcher\"},\"mFlags\":274726912,\"mWindowMode\":0},\"id\":3,\"persistentId\":3},\"timestamp\":1404116805.61}", 
"{\"duration\":15.320,\"taskInfo\":{\"baseIntent\":{\"mAction\":\"android.intent.action.MAIN\",\"mCategories\":[\"android.intent.category.LAUNCHER\"],\"mComponent\":{\"mClass\":\"kr.ac.jnu.netsys.MainActivity\",\"mPackage\":\"edu.mit.media.funf.wifiscanner\"},\"mFlags\":270532608,\"mWindowMode\":0},\"id\":103,\"persistentId\":103},\"timestamp\":1404116814.795}", 
"{\"duration\":38.126,\"taskInfo\":{\"baseIntent\":{\"mComponent\":{\"mClass\":\"com.rechild.advancedtaskkiller.AdvancedTaskKiller\",\"mPackage\":\"com.rechild.advancedtaskkiller\"},\"mFlags\":71303168,\"mWindowMode\":0},\"id\":104,\"persistentId\":104},\"timestamp\":1404116830.116}", 
"{\"duration\":3.015,\"taskInfo\":{\"baseIntent\":{\"mAction\":\"android.intent.action.MAIN\",\"mCategories\":[\"android.intent.category.LAUNCHER\"],\"mComponent\":{\"mClass\":\"kr.ac.jnu.netsys.MainActivity\",\"mPackage\":\"edu.mit.media.funf.wifiscanner\"},\"mFlags\":270532608,\"mWindowMode\":0},\"id\":103,\"persistentId\":103},\"timestamp\":1404116868.244}"
)), .Names = c("_id", "name", "timestamp", "value"), row.names = c(2653L, 
2729L, 2920L, 2921L, 2922L, 2923L), class = "data.frame")

这些数据是关于运行应用程序日志的,数据具有JSON格式。我只是搞不懂什么时候我想得到子价值。

我只是像这样编码

代码语言:javascript
复制
myData <- lapply(dRunningApplicationsProbe$value, fromJSON)

输出看起来就像

代码语言:javascript
复制
..$ duration : num 9.18
  ..$ taskInfo :List of 3
  .. ..$ baseIntent  :List of 5
  .. .. ..$ mAction    : chr "android.intent.action.MAIN"
  .. .. ..$ mCategories: chr "android.intent.category.HOME"
  .. .. ..$ mComponent :List of 2
  .. .. .. ..$ mClass  : chr "com.buzzpia.aqua.launcher.LauncherActivity"
  .. .. .. ..$ mPackage: chr "com.buzzpia.aqua.launcher"
  .. .. ..$ mFlags     : num 2.75e+08
  .. .. ..$ mWindowMode: num 0
  .. ..$ id          : num 3
  .. ..$ persistentId: num 3
  ..$ timestamp: num 1.4e+09

在本例中,很容易获得时间戳和持续时间值

代码语言:javascript
复制
dRunningApplicationsProbe$time <- do.call(rbind,lapply(myData, `[` ,'timestamp'))  

当我想获得mPakage值时,我遇到了问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-01 13:34:33

代码语言:javascript
复制
df <- structure(list(`_id` = c(2653L, 2729L, 2920L, 2921L, 2922L, 2923L
), name = c("RunningApplicationsProbe", "RunningApplicationsProbe", 
            "RunningApplicationsProbe", "RunningApplicationsProbe", "RunningApplicationsProbe", 
            "RunningApplicationsProbe"), timestamp = c(1404116791.097, 1404116803.554, 
                                                       1404116805.61, 1404116814.795, 1404116830.116, 1404116868.244
            ), value = c("{\"duration\":12.401,\"taskInfo\":{\"baseIntent\":{\"mAction\":\"android.intent.action.MAIN\",\"mCategories\":[\"android.intent.category.LAUNCHER\"],\"mComponent\":{\"mClass\":\"kr.ac.jnu.netsys.MainActivity\",\"mPackage\":\"edu.mit.media.funf.wifiscanner\"},\"mFlags\":268435456,\"mPackage\":\"edu.mit.media.funf.wifiscanner\",\"mWindowMode\":0},\"id\":102,\"persistentId\":102},\"timestamp\":1404116791.097}", 
                         "{\"duration\":2.055,\"taskInfo\":{\"baseIntent\":{\"mAction\":\"android.intent.action.MAIN\",\"mCategories\":[\"android.intent.category.LAUNCHER\"],\"mComponent\":{\"mClass\":\"com.nhn.android.search.ui.pages.SearchHomePage\",\"mPackage\":\"com.nhn.android.search\"},\"mFlags\":270532608,\"mWindowMode\":0},\"id\":97,\"persistentId\":97},\"timestamp\":1404116803.554}", 
                         "{\"duration\":9.183,\"taskInfo\":{\"baseIntent\":{\"mAction\":\"android.intent.action.MAIN\",\"mCategories\":[\"android.intent.category.HOME\"],\"mComponent\":{\"mClass\":\"com.buzzpia.aqua.launcher.LauncherActivity\",\"mPackage\":\"com.buzzpia.aqua.launcher\"},\"mFlags\":274726912,\"mWindowMode\":0},\"id\":3,\"persistentId\":3},\"timestamp\":1404116805.61}", 
                         "{\"duration\":15.320,\"taskInfo\":{\"baseIntent\":{\"mAction\":\"android.intent.action.MAIN\",\"mCategories\":[\"android.intent.category.LAUNCHER\"],\"mComponent\":{\"mClass\":\"kr.ac.jnu.netsys.MainActivity\",\"mPackage\":\"edu.mit.media.funf.wifiscanner\"},\"mFlags\":270532608,\"mWindowMode\":0},\"id\":103,\"persistentId\":103},\"timestamp\":1404116814.795}", 
                         "{\"duration\":38.126,\"taskInfo\":{\"baseIntent\":{\"mComponent\":{\"mClass\":\"com.rechild.advancedtaskkiller.AdvancedTaskKiller\",\"mPackage\":\"com.rechild.advancedtaskkiller\"},\"mFlags\":71303168,\"mWindowMode\":0},\"id\":104,\"persistentId\":104},\"timestamp\":1404116830.116}", 
                         "{\"duration\":3.015,\"taskInfo\":{\"baseIntent\":{\"mAction\":\"android.intent.action.MAIN\",\"mCategories\":[\"android.intent.category.LAUNCHER\"],\"mComponent\":{\"mClass\":\"kr.ac.jnu.netsys.MainActivity\",\"mPackage\":\"edu.mit.media.funf.wifiscanner\"},\"mFlags\":270532608,\"mWindowMode\":0},\"id\":103,\"persistentId\":103},\"timestamp\":1404116868.244}"
            )), .Names = c("_id", "name", "timestamp", "value"), row.names = c(2653L, 
                                                                               2729L, 2920L, 2921L, 2922L, 2923L), class = "data.frame")


myData <- lapply(df$value, fromJSON)
time <- do.call(rbind,lapply(myData, function(x) x$timestamp))
mPakage <- do.call(rbind,lapply(myData, function(x) x$taskInfo$baseIntent$mComponent$mPackage))

输出

代码语言:javascript
复制
new_df <- cbind(time,mPakage)

new_df
     [,1]             [,2]                            
[1,] "1404116791.097" "edu.mit.media.funf.wifiscanner"
[2,] "1404116803.554" "com.nhn.android.search"        
[3,] "1404116805.61"  "com.buzzpia.aqua.launcher"     
[4,] "1404116814.795" "edu.mit.media.funf.wifiscanner"
[5,] "1404116830.116" "com.rechild.advancedtaskkiller"
[6,] "1404116868.244" "edu.mit.media.funf.wifiscanner"
票数 1
EN

Stack Overflow用户

发布于 2014-12-01 13:48:07

创建一个路径,其中每个元素表示要访问的下一个级别的名称

代码语言:javascript
复制
path = c("taskInfo", "baseIntent", "mComponent", "mPackage")

然后使用这个索引到使用[[的列表中。

代码语言:javascript
复制
> sapply(myData, "[[", path)
[1] "edu.mit.media.funf.wifiscanner" "com.nhn.android.search"        
[3] "com.buzzpia.aqua.launcher"      "edu.mit.media.funf.wifiscanner"
[5] "com.rechild.advancedtaskkiller" "edu.mit.media.funf.wifiscanner"

更完整的解决方案可能是

代码语言:javascript
复制
paths = list(timestamp="timestamp",
             mPackage=c("taskInfo", "baseIntent", "mComponent", "mPackage"))

代码语言:javascript
复制
> sapply(paths, function(path) sapply(myData, "[[", path))
     timestamp        mPackage                        
[1,] "1404116791.097" "edu.mit.media.funf.wifiscanner"
[2,] "1404116803.554" "com.nhn.android.search"        
[3,] "1404116805.61"  "com.buzzpia.aqua.launcher"     
[4,] "1404116814.795" "edu.mit.media.funf.wifiscanner"
[5,] "1404116830.116" "com.rechild.advancedtaskkiller"
[6,] "1404116868.244" "edu.mit.media.funf.wifiscanner"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27227208

复制
相关文章

相似问题

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