在R中将多列转换为Json数组?

时间:2017-05-01 16:38:37

标签: arrays json r database postgresql

假设我有mtcars数据集,我想取三列并将它们转换为JSON数组。如何将其转换为json数组,是否可以将它们传递到POSTGRESQL数据库?

library(jsonlite)
df <- mtcars
attach(mtcars)
json.column <- cbind(mpg,cyl,disp) 

我是否使用toJSON()?

mtcars.json <- toJSON(json.column)

https://cran.r-project.org/web/packages/jsonlite/vignettes/json-aaquickstart.html

对象数组[{&#34; name&#34;:&#34; Erik&#34;,&#34; age&#34;:43},{&#34; name&#34;:&# 34; Anna&#34;,&#34; age&#34;:32}]数据框simplifyDataFrame

2 个答案:

答案 0 :(得分:2)

将您的数据保存为data.frame,而不是矩阵。使用

json.column <- data.frame(mpg,cyl,disp)
toJSON(json.column)
# [{"mpg":21,"cyl":6,"disp":160},{"mpg":21,"cyl":6,"disp":160}, ...

此外,您应该避免使用attach()。如果忘记detach(),可能会导致很多问题。另外,您可以经常使用with()来避免它

json.column <- with(mtcars, data.frame(mpg,cyl,disp))

答案 1 :(得分:1)

(对于初学者,永远不要使用attach!这很危险!通常使用with。)

有很多方法可以做到这一点。以下是使用dplyr创建值的方法:

qq <- rowwise(mtcars) %>% 
    mutate(newcol=as.character(jsonlite::toJSON(list(mpg=mpg, cyl=cyl, disp=disp))))
> qq$newcol
 [1] "{\"mpg\":[21],\"cyl\":[6],\"disp\":[160]}"     "{\"mpg\":[21],\"cyl\":[6],\"disp\":[160]}"    
 [3] "{\"mpg\":[22.8],\"cyl\":[4],\"disp\":[108]}"   "{\"mpg\":[21.4],\"cyl\":[6],\"disp\":[258]}"  
 ...

从那里开始,如果您的Postgres数据库设置为newcol作为JSON类型,我认为只需照常编写该表即可。