2017-03-04 3 views
1

J'ai besoin d'envoyer une réponse de R en utilisant package plombier en dessous le formatComment envoyer une réponse JSON en utilisant plombier R

{ 
    "status": "SUCCESS", 
    "code": "200", 
    "output": { 
    "studentid": "1001", 
    "name": "Kevin" 
    } 
} 

mais je reçois ci-dessous le format

[ 
    "{\n \"status\": \"SUCCESS\",\n \"code\": \"200\",\n \"output\": {\n \"studentid\": \"1001\",\n \"name\": \"Kevin\"\n }\n}" 
] 

S'il vous plaît aider moi formater ce JSON correctement

Mon code

#* @post /sum 
addTwo <- function(){ 
    library(jsonlite) 
    x <- list(status = "SUCCESS", code = "200",output = list(studentid = "1001", name = "Kevin")) 
    output<-toJSON(x,pretty = TRUE, auto_unbox = TRUE) 
    return (output) 
} 
+1

est le format correct, voir 'cat (your_string)' – mtoto

Répondre

1

J'ai ajouté un sérialiseur unboxedJSON à la version de développement de plombier. En fonction du moment où cela sera lu dans le futur, ce sérialiseur pourrait avoir été publié sur CRAN et pourrait même être le sérialiseur par défaut maintenant (je discute toujours).

Mais pour l'instant, vous pouvez installer la version de développement de GitHub (devtools::install_github("trestletech/plumber")) puis ajoutez l'annotation @serializer unboxedJSON à votre fonction comme ceci:

#* @post /sum 
#* @serializer unboxedJSON 
addTwo <- function(){ 
    list(status = "SUCCESS", code = "200",output = list(studentid = "1001", name = "Kevin")) 

} 

Pour votre information, si jamais vous voulez forcer plombier à retourner un texte que vous fournissez directement, vous devriez pouvoir définir l'élément $body sur res, puis renvoyer l'objet res de la fonction.

#* @get/
function(res){ 
    res$body <- "I am raw" 
    res 
} 

qui renvoie le texte non formaté, sérialisé I am raw dans sa réponse.

0

Supprimez simplement le wrapper toJSON(). Plumber fait déjà la sérialisation JSON, donc vous le faites deux fois en ajoutant une fonction toJSON.

Cela devrait fonctionner.

addTwo <- function(){ 
    x <- list(status = "SUCCESS", code = "200",output = list(studentid = "1001", name = "Kevin")) 
    return (x) 
}