0

我正在从 python 转换为 R,这是我第一次尝试解析 Json。我尝试过 jsonlite、RJSONIO 和 rjson。他们都停在了getlabskaters <- fromJSON(getlabskatersRaw)。稍微解释一下这个脚本,因为我显然需要一些关于如何正确解析 json 的帮助。它开始购买一个网站,该网站返回一些球队,我在 for 循环中使用这些球队来返回具有该球队列表的所有球员。奇怪的是,当我运行上面的代码时不会发生错误,fromJSON它只会在我将它放入 for 循环时发生。我检查了paste0和 的链接print(getlabskatersRaw)。所有这些看起来都可以浏览。对错误的一些帮助会很棒,如果您感到无聊并且对更好的解析策略有任何建议,我会全神贯注。

library(magrittr)
library(readr)
library(tidyr)
library(dplyr)
library(lubridate)
library(jsonlite)
library(httr)
library(stringi)
library(tidyverse)
library(httr)

# GET Todays date
today <- Sys.Date()

#Json return from URL
getlabteamsRaw<-paste0('https://www.fantasylabs.com/api/lines/4/', as.character(today),'/startinggoalies')

# Turn Value into List
getlabteams <- fromJSON(getlabteamsRaw)

# Parse home team
team<-getlabteams$GoalieMatchups$Properties$HomeTeam

# Convert 
Home_Fullname<-as.data.frame(team)
team<-getlabteams$GoalieMatchups$Properties$VisitorTeam
Away_Fullname<-as.data.frame(team)
LabTeams <- full_join(Home_Fullname, Away_Fullname, by = c("team"))

# PLAYER INDIVIDUAL NULL DF's
lab_skaters_df <- NULL

for(labtm in LabTeams){
  getlabskatersRaw<-paste0('https://www.fantasylabs.com/api/lines/4/', as.character(labtm),'/', as.character(today))

  ### THE ERROR IS HERE########
  getlabskaters <- fromJSON(getlabskatersRaw)

  # Parse Player name
  new<-getlabskaters$PlayerLines$Properties$FullName

  # Convert Value to Dataframe
  Fullname<-as.data.frame(new)

  #APPEND FEATURE 
  lab_skaters_df <- rbind(lab_skaters_df, Fullname)
}
4

1 回答 1

0

我认识到这是一个非答案,因为我只是在倾倒代码,而不是解释问题,但这对你有用。我还清理了你的代码(你正在加载一堆你实际上没有使用的包,或者已经通过加载library(tidyverse)),我使用包中的map_df函数purrr来循环遍历团队而不是 for环形。

library(jsonlite)
library(tidyverse)

# GET Todays date
today <- Sys.Date()

#Json return from URL
getlabteamsRaw <- paste0('https://www.fantasylabs.com/api/lines/4/', today, '/startinggoalies')

# Turn Value into List
getlabteams <- fromJSON(getlabteamsRaw)

teams <- c(getlabteams$GoalieMatchups$Properties$HomeTeam, getlabteams$GoalieMatchups$Properties$VisitorTeam)

myfun <- function(x) {
  getlabskatersRaw <- paste0('https://www.fantasylabs.com/api/lines/4/', x,'/', today)
  getlabskaters <- fromJSON(getlabskatersRaw)
  select(getlabskaters$PlayerLines$Properties, FullName, Position, Position, Line, Team, OppTeam, Salary_DK, Salary_FD, ActualPoints_DK, ActualPoints_FD, ImpPts_DK, ImpPts_FD)
}

myfinal_df <- map_df(teams, myfun)

# Wait a few seconds
myfinal_df
               FullName Position Line               Team             OppTeam Salary_DK Salary_FD
1       Phillip Danault       1C   1F Montreal Canadiens  Chicago Blackhawks      5400      5500
2           Carey Price       1G   1G Montreal Canadiens  Chicago Blackhawks      7900      8400
3           Ben Chiarot      1LD   1D Montreal Canadiens  Chicago Blackhawks      4400      4000
4           Tomas Tatar      1LW   1F Montreal Canadiens  Chicago Blackhawks      5800      6400
5            Shea Weber      1RD   1D Montreal Canadiens  Chicago Blackhawks      6400      6200
于 2020-01-15T05:10:50.393 回答