如何在R中将数据表转换为符合Qualtrics API要求的JSON格式?
解决Qualtrics批量删除响应API的JSON格式问题
你遇到的核心问题是构建请求体时列表结构错误,导致生成的JSON不符合Qualtrics API的要求。下面是修正后的代码,同时保留你从Excel复制粘贴响应ID的输入方式:
修正后的完整代码
install.packages(c("httr", "jsonlite")) library(httr) library(jsonlite) # 保留原输入方式:直接粘贴Excel的响应ID data <- read.table(text=' R_010101010101010 R_010101010101010 R_010101010101010 R_010101010101010 R_010101010101010 ') colnames(data) <- 'responseId' # 正确构建包含多个响应对象的列表 allResponses <- lapply(1:nrow(data), function(row) { list( responseId = as.character(data[row, 1]), # 确保是字符类型,避免自动转换问题 decrementQuotas = TRUE ) }) # 生成符合API要求的JSON,auto_unbox避免单个值被包装为数组 postData <- toJSON( list(deletes = allResponses), auto_unbox = TRUE, pretty = TRUE # 可选:格式化JSON方便查看结构 ) print(postData)
关键修正点
列表结构构建:
原代码中append(allResponses, response)会把每个response的键值对拆分开,导致最终列表扁平化。改用lapply直接生成包含多个子列表的数组结构,每个子列表对应一个响应的删除配置,完美匹配API需要的数组嵌套格式。JSON序列化参数:
添加auto_unbox = TRUE参数,避免将单个字符串/布尔值包装为JSON数组(比如原代码中出现的"responseId": ["R_xxx"]会变成"responseId": "R_xxx"),完全贴合API要求的格式。
修正后的JSON输出
生成的JSON会和API要求的结构完全一致:
{ "deletes": [ { "responseId": "R_010101010101010", "decrementQuotas": true }, { "responseId": "R_010101010101010", "decrementQuotas": true } // 其他响应对象... ] }
补充:完整POST请求调用(可选)
如果需要直接调用API,可添加以下代码(替换你的Qualtrics配置信息):
# Qualtrics API配置 api_key <- "YOUR_QUALTRICS_API_KEY" survey_id <- "YOUR_SURVEY_ID" base_url <- "https://yourdatacenter.qualtrics.com/API/v3/surveys" # 替换为你的数据中心域名 # 发送POST请求 response <- POST( url = paste0(base_url, "/", survey_id, "/responseBulkDeletes"), add_headers( "X-API-TOKEN" = api_key, "Content-Type" = "application/json" ), body = postData ) # 查看响应结果 cat(content(response, "text", encoding = "UTF-8"))
内容的提问来源于stack exchange,提问作者mbrz_0101
相关产品推荐
相关产品推荐

