web-dev-qa-db-fra.com

convertir la trame de données en json

J'ai une trame de données que j'aime convertir au format json:

ma trame de données appelée res1:

library(rjson)

structure(list(id = c(1, 2, 3, 4, 5), value = structure(1:5, .Label = c("server1", 
"server2", "server3", "server4", "server5"), class = "factor")), .Names = c("id", 
"value"), row.names = c(NA, -5L), class = "data.frame")

quand je fais:

toJSON(res1)

J'ai compris:

{"id":[1,2,3,4,5],"value":["server1","server2","server3","server4","server5"]}

J'ai besoin que cette sortie json soit comme ça, des idées?

[{"id":1,"value":"server1"},{"id":2,"value":"server2"},{"id":3,"value":"server3"},{"id":4,"value":"server4"},{"id":5,"value":"server5"}]
25
user1471980

Que diriez-vous

library(rjson)
x <- toJSON(unname(split(res1, 1:nrow(res1))))
cat(x)
# [{"id":1,"value":"server1"},{"id":2,"value":"server2"},
# {"id":3,"value":"server3"},{"id":4,"value":"server4"},
# {"id":5,"value":"server5"}]

En utilisant split(), nous divisons essentiellement le grand data.frame en un data.frame distinct pour chaque ligne. Et en supprimant les noms de la liste résultante, la fonction toJSON encapsule les résultats dans un tableau plutôt que dans un objet nommé.

21
MrFlick

Le package jsonlite existe pour résoudre exactement ce problème: "Un mappage pratique et cohérent entre les données JSON et les objets R."

Sa fonction toJSON fournit ce résultat souhaité avec les options par défaut:

library(jsonlite)
x <- toJSON(res1)
cat(x)

## [{"id":1,"value":"server1"},{"id":2,"value":"server2"},
## {"id":3,"value":"server3"},{"id":4,"value":"server4"},
## {"id":5,"value":"server5"}]
45
nycdatawrangler

Vous pouvez maintenant simplement appeler jsonlite::write_json() directement sur la trame de données.

1
Jared Wilber

Vous pouvez également utiliser library(jsonify)

jsonify::to_json( res1 )
# [{"id":1.0,"value":"server1"},{"id":2.0,"value":"server2"},{"id":3.0,"value":"server3"},{"id":4.0,"value":"server4"},{"id":5.0,"value":"server5"}]
0
SymbolixAU