我无法解析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)
但是我很担心我可能会在此过程中失去一些东西。有更好的方法吗?