我想播放现在以JSON格式保存的数据。但是我对R非常陌生,对如何处理数据一无所知。您可以在下面看到我设法实现的目标。但首先,我的代码:

library(rjson) 
json_file <- "C:\\Users\\Saonkfas\\Desktop\\WOWPAPI\\wowpfinaljson.json" 
json_data <- fromJSON(paste(readLines(json_file), collapse="")) 

我能够得到数据:
for (x in json_data){print (x)} 

尽管输出看起来很原始:
[[1]] 
[[1]]$wins 
[1] "118" 
 
[[1]]$losses 
[1] "40" 
# And so on 

请注意,JSON有点嵌套。我可以用Python创建表,但是R似乎要复杂得多。

编辑:

我的JSON:
{ 
"play1": [ 
    { 
        "wins": "118", 
        "losses": "40", 
        "max_killed": "7", 
        "battles": "158", 
        "plane_id": "4401", 
        "max_ground_object_destroyed": "3" 
    }, 
    { 
        "wins": "100", 
        "losses": "58", 
        "max_killed": "7", 
        "battles": "158", 
        "plane_id": "2401", 
        "max_ground_object_destroyed": "3" 
    }, 
    { 
        "wins": "120", 
        "losses": "38", 
        "max_killed": "7", 
        "battles": "158", 
        "plane_id": "2403", 
        "max_ground_object_destroyed": "3" 
    } 
], 
 
"play2": [ 
    { 
        "wins": "12", 
        "losses": "450", 
        "max_killed": "7", 
        "battles": "158", 
        "plane_id": "4401", 
        "max_ground_object_destroyed": "3" 
    }, 
    { 
        "wins": "150", 
        "losses": "8", 
        "max_killed": "7", 
        "battles": "158", 
        "plane_id": "2401", 
        "max_ground_object_destroyed": "3" 
    }, 
    { 
        "wins": "120", 
        "losses": "328", 
        "max_killed": "7", 
        "battles": "158", 
        "plane_id": "2403", 
        "max_ground_object_destroyed": "3" 
    } 
], 

请您参考如下方法:

fromJSON返回一个列表,您可以使用*apply函数遍历每个元素。
将其转换为“表”非常简单(一旦您知道该怎么做!)(数据框是正确的R术语)。

library(rjson) 
 
# You can pass directly the filename 
my.JSON <- fromJSON(file="test.json") 
 
df <- lapply(my.JSON, function(play) # Loop through each "play" 
  { 
  # Convert each group to a data frame. 
  # This assumes you have 6 elements each time 
  data.frame(matrix(unlist(play), ncol=6, byrow=T)) 
  }) 
 
# Now you have a list of data frames, connect them together in 
# one single dataframe 
df <- do.call(rbind, df) 
 
# Make column names nicer, remove row names 
colnames(df) <- names(my.JSON[[1]][[1]]) 
rownames(df) <- NULL 
 
df 
  wins losses max_killed battles plane_id max_ground_object_destroyed 
1  118     40          7     158     4401                           3 
2  100     58          7     158     2401                           3 
3  120     38          7     158     2403                           3 
4   12    450          7     158     4401                           3 
5  150      8          7     158     2401                           3 
6  120    328          7     158     2403                           3 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!