RShiny应用加载异常:asJSON命名向量错误及图表故障求助
RShiny应用图表显示"Error: [object Object]"及jsonlite命名向量警告问题
问题详情
- 开发RShiny应用,用于展示5-9月销售数据,支持按线上来源和SKU分类查看图表
- 基于旧模板开发,但一直碰到两个问题:
- 控制台弹出警告:
Input to asJSON(keep_vec_names=TRUE) is a named vector. In a future version of jsonlite, this option will not be supported... - 图表加载后只显示
Error: [object Object]
- 控制台弹出警告:
- 已经试过修改
renderUI逻辑、移除plotly依赖,都没解决,明天就得完成工作,急需解决办法,相关代码附上。
解决思路
1. 搞定jsonlite命名向量警告
这个警告是因为代码里有命名向量被转成JSON的操作,新版jsonlite对这种情况的支持要改了。
- 检查数据处理的代码,看看有没有返回命名向量的地方(比如用
dplyr::pull()时指定了name参数,或者手动给向量加了名字) - 把命名向量转成无命名向量或者数据框:
- 用
unname()去掉向量名称:unname(your_named_vector) - 要是需要保留名称,就转成数据框:
data.frame(sku = names(your_named_vector), sales = your_named_vector)
- 用
2. 排查"Error: [object Object]"的根源
这个是前端JS的通用错误,得看具体细节:
- 打开浏览器F12开发者工具,切到Console标签,看详细的错误堆栈,能找到具体是哪段代码出问题
- 检查绘图相关的
renderPlot/renderPlotly代码:- 确认输入控件的
input$source、input$sku能不能正确筛选数据,比如打印筛选后的数据看看有没有问题 - 把绘图代码单独拿出来跑,看能不能正常生成图表,排除数据格式错误(比如日期没转对、有NA值没处理)
- 确认输入控件的
- 如果用了plotly,注意版本兼容:
- 试试降级到plotly 4.10.x版本(这个版本和旧Shiny适配比较稳),跑
install.packages("plotly", version="4.10.2") - 或者更新Shiny和jsonlite到最新版,跑
update.packages(c("shiny", "jsonlite"))
- 试试降级到plotly 4.10.x版本(这个版本和旧Shiny适配比较稳),跑
3. 简化代码定位问题
- 先把动态UI的代码注释掉,用静态数据生成图表,确认基础绘图逻辑没问题
- 一点点加筛选逻辑(线上来源、SKU),每加一部分就测一次,找出出错的代码块
示例修复代码
假设数据处理时返回了命名向量:
# 错误写法:返回带SKU名称的销售向量 sales_vec <- sales_df %>% filter(month %in% 5:9) %>% pull(sales, name = sku) # 修复方式1:转为无命名向量 sales_vec <- sales_df %>% filter(month %in% 5:9) %>% pull(sales) # 修复方式2:转为数据框(保留SKU和销售数据) sales_df_clean <- sales_df %>% filter(month %in% 5:9) %>% select(sku, sales)
内容的提问来源于stack exchange,提问作者Struan Logan
相关产品推荐
相关产品推荐

