2016-08-10 1 views
0

Я новичок в R. В настоящее время я работаю над скриптом, использующим когнитивное обслуживание Microsoft для анализа настроений. Как часть проекта, я должен отправить тело в формате JSON в запрос на отправку в API. Ниже приведен синтаксис тела JSON, который необходимо отправить в почтовом запросе.Необходимо создать объект R для следующего синтаксиса 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. Мои попытки выглядели так:

список (список (документ = список (оценка = 1, ID = 1)))

ответ

1

Возможно library(jsonlite) может помочь? Затем вы могли бы построить DataFrame с той же структурой, что и 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

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)