在 R 中使用 JSON 提取数据时出现问题(出现词法错误)
Problems extracting data using JSON in R (getting a lexical error)
与这里问的问题相关:
library(rvest)
library(jsonlite)
library(magrittr)
library(stringr)
library(purrr)
library(dplyr)
get_state_index <- function(states, state) {
return(match(T, map(states, ~ {
.x$name == state
})))
}
s <- read_html("https://www.opentable.com/state-of-industry") %>% html_text()
all_data <- jsonlite::parse_json(stringr::str_match(s, "__INITIAL_STATE__ = (.*?\});w\.")[, 2])
fullbook <- all_data$covidDataCenter$fullbook
hawaii_dataset <- tibble(
date = fullbook$headers %>% unlist() %>% as.Date(),
yoy = fullbook$states[get_state_index(fullbook$states, "Hawaii")][[1]]$yoy %>% unlist()
)
我正在尝试从“州”选项卡中获取夏威夷数据集。该代码之前可以正常工作,但现在这部分代码会引发错误:
all_data <- jsonlite::parse_json(stringr::str_match(s, "__INITIAL_STATE__ = (.*?\});w\.")[, 2])
我遇到错误:
Error: lexical error: invalid char in json text. NA (right here) ------^
有什么建议的解决方案吗?该网站似乎在这一年中保持不变,但导致代码中断的是什么类型的更改?
如下所示更改正则表达式模式,以确保它在响应文本中正确捕获所需的字符串,即用于 all_data
的 JavaScript 对象
all_data <- jsonlite::parse_json(stringr::str_match(s, "__INITIAL_STATE__ = ([\s\S]+\});")[, 2])
注意:在 R 中,单个转义被加倍,例如\s
而不是上面显示的 \s
。
与这里问的问题相关:
library(rvest)
library(jsonlite)
library(magrittr)
library(stringr)
library(purrr)
library(dplyr)
get_state_index <- function(states, state) {
return(match(T, map(states, ~ {
.x$name == state
})))
}
s <- read_html("https://www.opentable.com/state-of-industry") %>% html_text()
all_data <- jsonlite::parse_json(stringr::str_match(s, "__INITIAL_STATE__ = (.*?\});w\.")[, 2])
fullbook <- all_data$covidDataCenter$fullbook
hawaii_dataset <- tibble(
date = fullbook$headers %>% unlist() %>% as.Date(),
yoy = fullbook$states[get_state_index(fullbook$states, "Hawaii")][[1]]$yoy %>% unlist()
)
我正在尝试从“州”选项卡中获取夏威夷数据集。该代码之前可以正常工作,但现在这部分代码会引发错误:
all_data <- jsonlite::parse_json(stringr::str_match(s, "__INITIAL_STATE__ = (.*?\});w\.")[, 2])
我遇到错误:
Error: lexical error: invalid char in json text. NA (right here) ------^
有什么建议的解决方案吗?该网站似乎在这一年中保持不变,但导致代码中断的是什么类型的更改?
如下所示更改正则表达式模式,以确保它在响应文本中正确捕获所需的字符串,即用于 all_data
的 JavaScript 对象all_data <- jsonlite::parse_json(stringr::str_match(s, "__INITIAL_STATE__ = ([\s\S]+\});")[, 2])
注意:在 R 中,单个转义被加倍,例如\s
而不是上面显示的 \s
。