需要为遵循JSON语法

时间:2016-08-10 10:23:10

标签: r geojson

我是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)))

2 个答案:

答案 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="")})
  )

然后,您可以使用lapplysplit.data.frame生成所需格式的列表:

result <- lapply(
  split(test, 1:nrow(test)), 
  function(x){
    list(language=x$language, id=x$id, text=x$text)
  })

并准确了解您发布的格式:

result <- unname(result)