read open leer how data cargar json r rjson

open - convertir el marco de datos a json



leer json r (3)

Ahora puede llamar fácilmente a jsonlite::write_json() directamente en el marco de datos.

Tengo un marco de datos que me gusta convertir a formato json:

mi marco de datos llamado 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")

Cuando lo hago:

toJSON(res1)

Entiendo esto:

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

Necesito que esta salida de json sea así, ¿alguna idea?

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


El paquete jsonlite existe para solucionar exactamente este problema: "Una asignación práctica y coherente entre los datos JSON y los objetos R".

Su función toJSON proporciona este resultado deseado con las opciones predeterminadas:

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"}]


Qué tal si

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"}]

Al usar split() esencialmente estamos dividiendo el data.rame grande en un data.frame separado para cada fila. Y al eliminar los nombres de la lista resultante, la función toJSON ajusta los resultados en una matriz en lugar de un objeto con nombre.