我是R.的新手。目前我正在编写一个脚本,使用Microsoft认知服务进行情绪分析。作为项目的一部分,我应该在post请求中将JSON格式的主体发送给API。以下是需要在post请求中发送的JSON正文的语法。
{
"documents": [
{
"language": "en",
"id": "1",
"text": "i love mcdonalrds"
},
{
"language": "en",
"id": "2",
"text": "i love kfc"
}
]
}
以下是R对象看起来的方式
$documents
$documents[[1]]
$documents[[1]]$language
[1] "en"
$documents[[1]]$id
[1] "1"
$documents[[1]]$text
[1] "i love mcdonalrds"
$documents[[2]]
$documents[[2]]$language
[1] "en"
$documents[[2]]$id
[1] "2"
$documents[[2]]$text
[1] "i love kfc"
我尝试了R中列表的多个组合来创建上面的R对象,但是在Vain中。我的尝试看起来像这样:
list(list(document = list(score = 1,id = 1)))
答案 0 :(得分:1)
也许library(jsonlite)
会有所帮助?然后你可以构建一个与下面的mydf
结构相同的数据框,而不是嵌套列表(除非你绝对需要后者 - 我从你的帖子中无法理解)。
library(jsonlite)
json.str <- '{
"documents": [
{
"language": "en",
"id": "1",
"text": "i love mcdonalrds"
},
{
"language": "en",
"id": "2",
"text": "i love kfc"
}
]
}'
mydf <- fromJSON(json.str)
print(mydf)
print(toJSON(mydf, pretty=TRUE))
参考: https://cran.r-project.org/web/packages/jsonlite/vignettes/json-aaquickstart.html
答案 1 :(得分:0)
假设您的数据位于data.frame
且字段为列,就像此示例代码所创建的那样:
test <- data.frame(
language=sample(c("de", "en"), 100, replace=TRUE),
id=1:100,
text=replicate(100, {paste(sample(letters, 140, replace=TRUE), collapse="")})
)
然后,您可以使用lapply
和split.data.frame
生成所需格式的列表:
result <- lapply(
split(test, 1:nrow(test)),
function(x){
list(language=x$language, id=x$id, text=x$text)
})
并准确了解您发布的格式:
result <- unname(result)