获取错误词法错误:JSON文本中字符无效

b0zn9rqh  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(114)

我得到的错误词法错误,而运行以下代码

library(highcharter)
library(shiny)

ui <- fluidPage(
  highchartOutput("map")
)

server <- function(input, output) {

  
  output$map <- renderHighchart({
    hcmap(
      "https://code.highcharts.com/mapdata/custom/world-lowres.js")  # Replace "custom/world" with your map name
  })
}

shinyApp(ui, server)

我需要一些帮助来解决它。

vzgqcmou

vzgqcmou1#

如果在fromJSON之前检查mapdata(例如str(mapdata)),可以看到它以非json开头:

### from the previous version of your question
mapdata <- readLines("https://code.highcharts.com/mapdata/custom/world-lowres.js", warn = FALSE, encoding = "UTF-8")
mapdata[1] <- gsub(".* = ", "", mapdata[1])
mapdata <- paste(mapdata, collapse = "\n")
mapdata <- stringr::str_remove(mapdata, ";$")

### divergence/exploration
str(mapdata)
#  chr "Highcharts.maps[\"custom/world-lowres\"]={\"title\":\"World, Miller projection, low resolution\",\"version\":\""| __truncated__

我们需要删除第一个=(字符39处)之前的所有内容。

obj <- jsonlite::fromJSON(sub("^[^=]*=", "", mapdata))
str(obj, max.level = 1)
# List of 9
#  $ title         : chr "World, Miller projection, low resolution"
#  $ version       : chr "2.1.0"
#  $ type          : chr "FeatureCollection"
#  $ copyright     : chr "Copyright (c) 2023 Highsoft AS, Based on data from Natural Earth"
#  $ copyrightShort: chr "Natural Earth"
#  $ copyrightUrl  : chr "http://www.naturalearthdata.com"
#  $ crs           :List of 2
#  $ hc-transform  :List of 1
#  $ features      :'data.frame':   213 obs. of  4 variables:

更多关于您的原始问题代码(已更改)的评论:
看看你的gsub没有做任何事情:

mapdata <- readLines("https://code.highcharts.com/mapdata/custom/world-lowres.js", warn = FALSE, encoding = "UTF-8")
str(mapdata)
#  chr "Highcharts.maps[\"custom/world-lowres\"]={\"title\":\"World, Miller projection, low resolution\",\"version\":\""| __truncated__
nchar(mapdata)
# [1] 170260
mapdata[1] <- gsub(".* = ", "", mapdata[1])
nchar(mapdata)
# [1] 170260

因此,初始的gsub没有任何作用,因为=周围的空格不在数据中。你可以去掉空格,看看是否有效。
不过,底线是,无论您在这里做什么,都需要在调用hcmap之前完成。

相关问题