r将httr GET响应解析为单个数据帧

时间:2019-05-11 17:55:52

标签: r json data.table httr

我无法解析GET命令对我想要的响应。目标是为GET返回的每个列获取一个包含一列的数据框。除了wosliteKey缺少的值之外,下面用于生成响应的代码。 RDS格式的响应数据为here。这是一个16k的文件。我尝试过dput,但是它太大了,无法粘贴到此文本区域。

count <- 100
url <- 'https://api.clarivate.com/api/woslite/'
query <- 'ts=(land AND ocean AND climate AND change AND food security) AND PY=2013-2019'
response <- httr::GET(url, httr::add_headers(accept = 'application/json', `X-APIKey` = wosliteKey),  query = list(databaseId = 'WOK', usrQuery = query, count = count, firstRecord = firstRecord))

我使用以下两个命令将响应转换为json类型文件

jsonRespText <- content(response, "text") 
  j <- fromJSON(jsonRespText)

这将导致数据帧包含一些复杂的元素。这是str(j, max.level = 3)的输出。数据的几个元素是嵌套数据帧,其列为列表。

我希望嵌套数据帧的所有列都是单个数据帧中的列。所有列都是字符。

使用jData <- as.data.table(flatten(j$Data))    我得到一个27列的数据表。但是每一列都是一个列表。

List of 2
 $ QueryResult:List of 3
  ..$ QueryID        : int 2
  ..$ RecordsSearched: int 71811425
  ..$ RecordsFound   : int 66
 $ Data       :'data.frame':    66 obs. of  7 variables:
  ..$ Keyword:'data.frame': 66 obs. of  1 variable:
  .. ..$ Keywords:List of 66
  ..$ Title  :'data.frame': 66 obs. of  1 variable:
  .. ..$ Title:List of 66
  ..$ Doctype:'data.frame': 66 obs. of  1 variable:
  .. ..$ Doctype:List of 66
  ..$ Author :'data.frame': 66 obs. of  2 variables:
  .. ..$ Authors         :List of 66
  .. ..$ BookGroupAuthors:List of 66
  ..$ Source :'data.frame': 66 obs. of  9 variables:
  .. ..$ Pages               :List of 66
  .. ..$ SupplementNumber    :List of 66
  .. ..$ SourceTitle         :List of 66
  .. ..$ SpecialIssue        :List of 66
  .. ..$ Volume              :List of 66
  .. ..$ Published.BiblioDate:List of 66
  .. ..$ Published.BiblioYear:List of 66
  .. ..$ Issue               :List of 66
  .. ..$ BookSeriesTitle     :List of 66
  ..$ UT     : chr [1:66] "WOS:000317372700003" "WOS:000367881500035" "WOS:000399397700046" "WOS:000419351000013" ...
  ..$ Other  :'data.frame': 66 obs. of  12 variables:
  .. ..$ Identifier.Eissn                      :List of 66
  .. ..$ Contributor.ResearcherID.Names        :List of 66
  .. ..$ Contributor.ResearcherID.ResearcherIDs:List of 66
  .. ..$ Identifier.Doi                        :List of 66
  .. ..$ Identifier.Issn                       :List of 66
  .. ..$ ResearcherID.Disclaimer               :List of 66
  .. ..$ Identifier.Ids                        :List of 66
  .. ..$ Identifier.article_no                 :List of 66
  .. ..$ Identifier.Eisbn                      :List of 66
  .. ..$ Identifier.Isbn                       :List of 66
  .. ..$ Identifier.Parent_Book_Doi            :List of 66
  .. ..$ Identifier.Xref_Doi                   :List of 66

我可以使用

将这些列表转换为字符列
jData[, ] <- lapply(jData[, ], as.character)

但是我很担心我可能会在此过程中失去一些东西。有更好的方法吗?

0 个答案:

没有答案