You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除jsonlite生成的JSON字符串中的转义斜杠?

解决jsonlite转JSON后环境面板及Plumber部署出现转义斜杠的问题

问题根源

  • jsonlite::toJSON()返回的是json类对象,控制台的print()方法会自动美化输出,隐藏转义字符;但环境面板显示的是该对象的原始字符串表示,因此会出现转义斜杠\。
  • Plumber的@serializer json会对函数返回值执行JSON序列化操作,如果返回的是已经序列化完成的JSON字符串(比如myvar),就会被二次序列化,导致转义斜杠保留在最终输出中。

解决方案

方案1:让Plumber直接序列化原始DataFrame(推荐)

无需提前将DataFrame转为JSON,直接返回原始DataFrame,利用Plumber的@serializer json自动完成序列化,避免重复操作:

library(plumber)
library(dplyr)
library(jsonlite)

# 定义原始DataFrame
df <- data.frame (
  Training = c("Strength", "Stamina", "Other"),
  Pulse = c(100, 150, 120),
  Duration = c(60, 30, 45)
)

#* @param symbol Ticker symbol (just to input something in the function)
#* @get /return
#* @serializer json
financial_data <- function(symbol) {
  df # 返回原始DataFrame,由Plumber自动序列化
}

方案2:提前生成JSON字符串,避免Plumber二次序列化

如果必须提前生成JSON字符串,先将json类对象转为普通字符,再用@serializer text直接返回文本内容:

library(plumber)
library(dplyr)
library(jsonlite)

df <- data.frame (
  Training = c("Strength", "Stamina", "Other"),
  Pulse = c(100, 150, 120),
  Duration = c(60, 30, 45)
)
# 将json对象转为普通字符串
myvar <<- as.character(toJSON(df, pretty=FALSE))

#* @param symbol Ticker symbol (just to input something in the function)
#* @get /return
#* @serializer text
financial_data <- function(symbol) {
  myvar
}

或者手动设置响应头,直接返回JSON文本:

library(plumber)
library(dplyr)
library(jsonlite)

df <- data.frame (
  Training = c("Strength", "Stamina", "Other"),
  Pulse = c(100, 150, 120),
  Duration = c(60, 30, 45)
)
myvar <<- toJSON(df, pretty=FALSE)

#* @param symbol Ticker symbol (just to input something in the function)
#* @get /return
financial_data <- function(symbol, res) {
  res$setHeader("Content-Type", "application/json")
  as.character(myvar)
}

内容的提问来源于stack exchange,提问作者user2165379

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:55:33