我正在尝试将此 Qualtrics API 端点(https://api.qualtrics.com/0cc0b9dcffc6f-start-a-delete-survey-responses-job)与 R 一起使用,通过使用从调查中批量删除回复httr 和 jsonlite R 包。保持数据输入原样很重要,因为脚本应该让某人直接从 Excel 文档复制/粘贴一系列响应 ID。
这是我当前的带有虚拟数据的代码(除了发布请求代码之外的所有内容):
library(httr)
library(jsonlite)
data <- read.table(text='
R_010101010101010
R_010101010101010
R_010101010101010
R_010101010101010
R_010101010101010
')
colnames(data) <- 'responseId'
allResponses <- list()
for (row in 1:nrow(data)) {
response <- list(responseId=data[row, 1],decrementQuotas=TRUE)
allResponses <- append(allResponses, response)
}
postData <- toJSON(list(deletes=allResponses))
print(postData)
尝试提交 POST 请求时出现错误,因为请求的正文格式不正确。它需要采用这种格式:
{
"deletes": [
{
"responseId": "R_1234",
"decrementQuotas": true
}
]
}
但是我的代码打印出来的是这个
{"deletes":{"responseId":["R_010101010101010"],"decrementQuotas":[true],"responseId.1":["R_010101010101010"],"decrementQuotas.1":[true],"responseId.2":["R_010101010101010"],"decrementQuotas.2":[true],"responseId.3":["R_010101010101010"],"decrementQuotas.3":[true],"responseId.4":["R_010101010101010"],"decrementQuotas.4":[true]}}
你们能帮我把这些数据强制转换成正确的 JSON 格式吗?
小心追加。现在它没有按照您想要的方式构建列表。你会做循环更像
allResponses <- list()
for (row in 1:nrow(data)) {
response <- list(responseId=data[row, 1],decrementQuotas=TRUE)
allResponses <- append(allResponses, list(response))
}
postData <- toJSON(list(deletes=allResponses), auto_unbox = TRUE)
cat(postData)
# {"deletes":[{"responseId":"R_010101010101010","decrementQuotas":true},
# {"responseId":"R_010101010101010","decrementQuotas":true},
# {"responseId":"R_010101010101010","decrementQuotas":true},
# {"responseId":"R_010101010101010","decrementQuotas":true},
# {"responseId":"R_010101010101010","decrementQuotas":true}]}
这里我们也用
auto_unbox
去掉多余的括号
但是与其使用循环,更好的制作列表的方法是首先使用像
lapply
这样的东西
allResponses <- lapply(1:nrow(data), function(row) {
list(responseId=data[row, 1],decrementQuotas=TRUE)
})
在这种情况下不需要循环和附加。