我使用R
从getURL
调用API,返回JSON响应。
当我在R中查看typeof
时,它会给我[1] "character"
。
我正在尝试以JSON格式存储我的数据,以便能够将其转换为DataTable。可能是什么原因,它是一个字符列表,我该如何解决它?
这是我从API返回的数据中获得的内容:
[1] "HTTP/1.1 200 OK\r\nDate: Thu, 04 Jan 2018 20:38:50 GMT\r\nContent-Type: application/json; charset=utf-8\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nSet-Cookie: __cfduid=d6bbf45645c3bd5332f83d25d06d8b8ca1515098329; expires=Fri, 04-Jan-19 20:38:49 GMT; path=/; domain=.onesignal.com; HttpOnly\r\nStatus: 200 OK\r\nCache-Control: public, max-age=7200\r\nAccess-Control-Allow-Origin: *\r\nX-XSS-Protection: 1; mode=block\r\nX-Request-Id: bd2552de-bf7d-4a0c-94d6-ff1b6856002a\r\nAccess-Control-Allow-Headers: SDK-Version\r\nETag: W/\"47580e0a23e806945b01f1237219175c\"\r\nX-Frame-Options: SAMEORIGIN\r\nX-Runtime: 0.112902\r\nX-Content-Type-Options: nosniff\r\nX-Powered-By: Phusion Passenger 5.1.4\r\nCF-Cache-Status: REVALIDATED\r\nExpires: Thu, 04 Jan 2018 22:38:50 GMT\r\nServer: cloudflare-nginx\r\nCF-RAY: 3d8100f109c6a23f-ICN\r\n\r\n{\"total_count\":2057,\"offset\":0,\"limit\":50,\"notifications\":[{\"adm_big_picture\":\"\",\"adm_group\":\"\",\"adm_group_message\":{\"en\":\"\... <truncated>
如果我尝试将fromJSON函数与此数据一起使用, 我明白了:
Error in file(con, "r") : cannot open the connection
答案 0 :(得分:3)
WHERE
(CAST(cp.startdate AS DATE) >= CAST(DATEADD(year, -1, DATEADD(month, DATEDIFF(month, 0, getdate()), 0)) AS DATE)
OR --FirstDayOfCurrentMonthPriorYear
CASE
WHEN DATEPART(month,getdate()) = 1 --month is January
THEN CAST(DATEADD(month, DATEDIFF(month, 0, getdate())-1, 0) AS DATE) --FirstDayOfLastMonthPriorYear
ELSE CAST(DATEADD(year, -1, DATEADD(month, DATEDIFF(month, 0, getdate()) -1, 0)) AS DATE) --FirstDayOfLastMonthPriorYear
END)
AND CAST(cp.EndDate AS DATE) <= CAST(DATEADD(day, -1, DATEADD(month, DATEDIFF(month, 0, GETDATE()) + 1, 0)) AS DATE) --LastDayOfCurrentMonthCurrentYear
非常适合解析JSON。你的问题是你的JSON前面有很多东西。 (也许之后,也不能告诉......)
我认为JSON从第一个jsonlite::fromJSON
开始,所以我们会在此之前删除所有内容。调用您的数据{
:
x
输入模式into the Regex101 tool的未转义版本以获得解释。 (非转义版本使用单个而不是双反斜杠:x = sub('^[^\\{]*\\{', '{', x)
jsonlite::fromJSON(x)
。在R字符串中,我们需要加倍反斜杠。)
以下是基于您的数据的工作示例:
^[^\{]*\{
答案 1 :(得分:0)
您可以使用rjson
包将输入转换为json。使用simplifyDataFrame
参数fromJSON
应输出数据框对象。
Importing data from a JSON file into R
[编辑]
您的数据返回时带有一些标题,您可以克服它从字符串中删除它并传递给fromJSON
library(stringr)
library(rjson)
json <- str_sub(str_extract(data, "ICN\\r\\n\\r\\n.*"), 8)
df <- as.data.frame(fromJSON(json))
> head(df)
total_count
1 2057