R 如何使用jsonlite将json对象解析为POSIXct格式?

R 如何使用jsonlite将json对象解析为POSIXct格式?,r,R,我想告诉json解析器其中一列应该是POSIXct。当解析器丢失时间信息时,如何做到这一点 library(rvest) library(jsonlite) url = "http://www.cmegroup.com/CmeWS/mvc/Settlements/Futures/Settlements/5081/FUT?tradeDate=04/06/2018&strategy=DEFAULT&pageSize=500" strJson

我想告诉json解析器其中一列应该是POSIXct。当解析器丢失时间信息时,如何做到这一点

    library(rvest)
    library(jsonlite)

      url = "http://www.cmegroup.com/CmeWS/mvc/Settlements/Futures/Settlements/5081/FUT?tradeDate=04/06/2018&strategy=DEFAULT&pageSize=500"
      strJson <- html_text(read_html(url))

      json <- map(strJson, ~fromJSON(.))
      mData <- as.matrix(as.data.frame(json))
      dat <- as.POSIXct(mData[,10], format='%H:%M:%S %d %b %Y')
库(rvest)
图书馆(jsonlite)
url=”http://www.cmegroup.com/CmeWS/mvc/Settlements/Futures/Settlements/5081/FUT?tradeDate=04/06/2018&strategy=DEFAULT&pageSize=500"

strJson确保将
library(purr)
以及
map()
放在该软件包的函数中。 该列作为因子导入。它需要先换成字符

cdat <- as.character(mData[,10]))

cdat确保将
library(purr)
以及
map()
放在该软件包的函数中。 该列作为因子导入。它需要先换成字符

cdat <- as.character(mData[,10]))

cdat问题可能是语言环境
LC\u时间
。Mine设置为
de_de.UTF-8
,因此无法解析字符串,因为特定于语言环境的选项,如
%p
。使用
Sys.getlocale(“LC\U时间”)
检查您的语言环境

将其更改为英语版本可以完成以下任务:

library(rvest)
library(jsonlite)

url = "http://www.cmegroup.com/CmeWS/mvc/Settlements/Futures/Settlements/5081/FUT?tradeDate=04/06/2018&strategy=DEFAULT&pageSize=500"
strJson <- html_text(read_html(url))

json  <- map(strJson, ~fromJSON(.))
mData <- as.data.frame(json, stringsAsFactors = F)

Sys.setlocale("LC_TIME", "en_GB.UTF-8")
dat  <- as.POSIXct(mData$updateTime, format='%A, %d %b %Y %I:%M %p')



head(dat)
[1] "2018-04-06 22:33:00 CEST" "2018-04-06 22:33:00 CEST" "2018-04-06 22:33:00 CEST" "2018-04-06 22:33:00 CEST"
[5] "2018-04-06 22:33:00 CEST" "2018-04-06 22:33:00 CEST"
库(rvest)
图书馆(jsonlite)
url=”http://www.cmegroup.com/CmeWS/mvc/Settlements/Futures/Settlements/5081/FUT?tradeDate=04/06/2018&strategy=DEFAULT&pageSize=500"

strJson问题可能是语言环境
LC\u时间
。Mine设置为
de_de.UTF-8
,因此无法解析字符串,因为特定于语言环境的选项,如
%p
。使用
Sys.getlocale(“LC\U时间”)
检查您的语言环境

将其更改为英语版本可以完成以下任务:

library(rvest)
library(jsonlite)

url = "http://www.cmegroup.com/CmeWS/mvc/Settlements/Futures/Settlements/5081/FUT?tradeDate=04/06/2018&strategy=DEFAULT&pageSize=500"
strJson <- html_text(read_html(url))

json  <- map(strJson, ~fromJSON(.))
mData <- as.data.frame(json, stringsAsFactors = F)

Sys.setlocale("LC_TIME", "en_GB.UTF-8")
dat  <- as.POSIXct(mData$updateTime, format='%A, %d %b %Y %I:%M %p')



head(dat)
[1] "2018-04-06 22:33:00 CEST" "2018-04-06 22:33:00 CEST" "2018-04-06 22:33:00 CEST" "2018-04-06 22:33:00 CEST"
[5] "2018-04-06 22:33:00 CEST" "2018-04-06 22:33:00 CEST"
库(rvest)
图书馆(jsonlite)
url=”http://www.cmegroup.com/CmeWS/mvc/Settlements/Futures/Settlements/5081/FUT?tradeDate=04/06/2018&strategy=DEFAULT&pageSize=500"

strJson不是一个答案,因为Martin对具体问题有一个非常简洁的答案(但如果能让你感觉更好的话,请书呆子投反对票)

只是一个关于备用数据采集和转换工作流的建议:

src_url <- "http://www.cmegroup.com/CmeWS/mvc/Settlements/Futures/Settlements/5081/FUT?tradeDate=04/06/2018&strategy=DEFAULT&pageSize=500"

x <- jsonlite::fromJSON(src_url)

x$settlements <- list(x$settlements)

tidyr::unnest(tibble::as_data_frame(x))
## # A tibble: 58 x 14
##    updateTime  dsHeader reportType tradeDate empty month open  high  low   last  change settle volume openInterest
##    <chr>       <chr>    <chr>      <chr>     <lgl> <chr> <chr> <chr> <chr> <chr> <chr>  <chr>  <chr>  <chr>       
##  1 Friday, 06… Dated B… Final      04/06/20… FALSE APR … -     -     -     -     -1.02  66.81  0      75          
##  2 Friday, 06… Dated B… Final      04/06/20… FALSE MAY … -     -     -     -     -1.24  66.84  0      75          
##  3 Friday, 06… Dated B… Final      04/06/20… FALSE JUN … -     -     -     -     -1.24  66.37  0      75          
##  4 Friday, 06… Dated B… Final      04/06/20… FALSE JLY … -     -     -     -     -1.25  65.95  0      75          
##  5 Friday, 06… Dated B… Final      04/06/20… FALSE AUG … -     -     -     -     -1.24  65.56  0      0           
##  6 Friday, 06… Dated B… Final      04/06/20… FALSE SEP … -     -     -     -     -1.24  65.19  0      0           
##  7 Friday, 06… Dated B… Final      04/06/20… FALSE OCT … -     -     -     -     -1.25  64.78  0      0           
##  8 Friday, 06… Dated B… Final      04/06/20… FALSE NOV … -     -     -     -     -1.24  64.46  0      0           
##  9 Friday, 06… Dated B… Final      04/06/20… FALSE DEC … -     -     -     -     -1.22  64.15  0      0           
## 10 Friday, 06… Dated B… Final      04/06/20… FALSE JAN … -     -     -     -     -1.20  63.82  0      0           
## # ... with 48 more rows

src_url不是一个答案,因为马丁对具体问题有一个非常简洁的答案(但如果能让你感觉更好的话,学究们会被邀请投否决票)

只是一个关于备用数据采集和转换工作流的建议:

src_url <- "http://www.cmegroup.com/CmeWS/mvc/Settlements/Futures/Settlements/5081/FUT?tradeDate=04/06/2018&strategy=DEFAULT&pageSize=500"

x <- jsonlite::fromJSON(src_url)

x$settlements <- list(x$settlements)

tidyr::unnest(tibble::as_data_frame(x))
## # A tibble: 58 x 14
##    updateTime  dsHeader reportType tradeDate empty month open  high  low   last  change settle volume openInterest
##    <chr>       <chr>    <chr>      <chr>     <lgl> <chr> <chr> <chr> <chr> <chr> <chr>  <chr>  <chr>  <chr>       
##  1 Friday, 06… Dated B… Final      04/06/20… FALSE APR … -     -     -     -     -1.02  66.81  0      75          
##  2 Friday, 06… Dated B… Final      04/06/20… FALSE MAY … -     -     -     -     -1.24  66.84  0      75          
##  3 Friday, 06… Dated B… Final      04/06/20… FALSE JUN … -     -     -     -     -1.24  66.37  0      75          
##  4 Friday, 06… Dated B… Final      04/06/20… FALSE JLY … -     -     -     -     -1.25  65.95  0      75          
##  5 Friday, 06… Dated B… Final      04/06/20… FALSE AUG … -     -     -     -     -1.24  65.56  0      0           
##  6 Friday, 06… Dated B… Final      04/06/20… FALSE SEP … -     -     -     -     -1.24  65.19  0      0           
##  7 Friday, 06… Dated B… Final      04/06/20… FALSE OCT … -     -     -     -     -1.25  64.78  0      0           
##  8 Friday, 06… Dated B… Final      04/06/20… FALSE NOV … -     -     -     -     -1.24  64.46  0      0           
##  9 Friday, 06… Dated B… Final      04/06/20… FALSE DEC … -     -     -     -     -1.22  64.15  0      0           
## 10 Friday, 06… Dated B… Final      04/06/20… FALSE JAN … -     -     -     -     -1.20  63.82  0      0           
## # ... with 48 more rows

src\u url当您使用
%I
将PM转换为小时时,您的答案胜过我的答案。我不知道有这样的事情。但我还是得到了你的解决方案,你的答案比我的好,因为你也使用
%i
将PM转换为小时。我不知道有这样的事情。我仍然得到
NA
与您的解决方案与您的代码我得到:“错误在开放的。连接(con,“rb”):HTTP错误407。“啊,你背后是一个透明或完全的代理,
jsonlite
似乎仍然没有直接使用代理。另一种选择可能是
x和您的代码:“open.connection中的错误(con,“rb”):HTTP Error 407。”啊,您使用的是透明代理或完全代理,并且
jsonlite
似乎仍然没有直接使用代理。一种选择可能是
x