2017-03-01 75 views
1

我有一個data.json文件看起來像這樣:JSON到數據幀

{ 
    "A" : { 
    "data" : "a1 aa2 aaa3\na4 aa5 aaa6\na7 aa8 aaa9" 
    }, 
    "B" : { 
    "data" : "b1 bb2 bbb3\nb4 bb5 bbb6\nb7 bb8 bbb9" 
    }, 
    "C" : { 
    "data" : "c1 cc2 ccc3\nc4 cc5 ccc6\nc7 cc8 ccc9" 
    } 
} 

我想將其轉換爲數據幀(稱爲output),一個data.frame每個大寫字母的列表。字符串"\n"區分數據幀中的行。每個數據幀應該是這樣的:

> print(output[[1]]) 

    X1 X2 X3 
1 a1 aa2 aaa3 
2 a4 aa5 aaa6 
3 a7 aa8 aaa9 

> print(output[[2]]) 

    X1 X2 X3 
1 b1 bb2 bbb3 
2 b4 bb5 bbb6 
3 b7 bb8 bbb9 

#and so on... 
+1

你試過像'jsonlite'這樣的包可以幫助你操縱你的JSON對象嗎? –

+0

還沒有,我只用rjson庫加載了我的JSON文件 – mat

回答

1

只需加載使用rjson/jsonlite庫中的JSON文件列表,閱讀每個字符串作爲數據幀與read.table功能:

lapply(rjson::fromJSON(file = "data.json"), function(x) read.table(text = x$data)) 

#$A 
# V1 V2 V3 
#1 a1 aa2 aaa3 
#2 a4 aa5 aaa6 
#3 a7 aa8 aaa9 

#$B 
# V1 V2 V3 
#1 b1 bb2 bbb3 
#2 b4 bb5 bbb6 
#3 b7 bb8 bbb9 

#$C 
# V1 V2 V3 
#1 c1 cc2 ccc3 
#2 c4 cc5 ccc6 
#3 c7 cc8 ccc9