使用 jsonlite 解析 JSON "None" 的问题

Issues Parsing JSON "None" with jsonlite

我正在尝试从英国 covid 控制面板中读取有关疫苗接种数据的一些数据,这些数据将一些数据编码为 csv 文件中的 JSON。 (下载 link 为 here) from the Vaccination uptake, by vaccination date age demographics on the page (https://coronavirus.data.gov.uk/details/vaccinations?areaType=nation&areaName=England)。出现的问题是我的代码不再成功地将 JSON 数据扩展为 data.frame。当数据遇到 None 对象时,这似乎是一个解析问题。

我的代码读入数据如下(此代码在2021-11-25下载的数据上成功,但在2021-12-02的数据上失败)。下面的代码在 fromJSON 命令上失败,该命令现在在到达 "Arg": None 时出错,声称词法错误。错误消息显示在代码下方。

library(tidyverse)
library(jsonlite)

#! Read in the latest national dashboard data
df <- read_csv("<filepath>")

df |> 
  mutate(vaccinationsAgeDemographics = map(vaccinationsAgeDemographics, ~fromJSON(. |> str_replace_all("'", "\"")))) |> 
  unnest(cols = c(vaccinationsAgeDemographics))
Error: Problem with `mutate()` column `vaccinationsAgeDemographics`.
i `vaccinationsAgeDemographics = map(...)`.
x lexical error: invalid char in json text.
          yVaccinationDatePercentage": None}, {"age": "16_17", "Vaccin
                     (right here) ------^

简化的测试线如下:

fromJSON(df$vaccinationsAgeDemographics[1] |> str_replace_all("'", "\""))

这引发了类似的错误:

Error: lexical error: invalid char in json text.
          yVaccinationDatePercentage": None}, {"age": "16_17", "Vaccin
                     (right here) ------^

我已经设法解决了这个问题,因为可能的 json 映射在此处的 jsonlite 文档中进行了讨论:https://cran.r-project.org/web/packages/jsonlite/vignettes/json-mapping.pdf

预知数据是数字类型并且 None 不包含在任何指标名称中,我们可以使用 "NA" 替换 None 字符串以下代码:

library(tidyverse)
library(jsonlite)

df <- read_csv("C:\Users\joel.kandiah\Downloads\data_2021-Dec-02.csv")

fromJSON(df$vaccinationsAgeDemographics[1] |> str_replace_all("'", "\"") |> str_replace_all("None", "\"NA\""))