我正在使用R中的jsonlite包,并希望将复杂列表转换为JSON对象。假设x是我的列表:
library(jsonlite)
x= list(a=1,B=2,c=list(D=4,e=5,'F g'='NAME',H=list(i=list(j=list(K=1)))))
x=
$a
[1] 1
$B
[1] 2
$c
$c$D
[1] 4
$c$e
[1] 5
$c$`F g`
[1] "NAME"
$c$H
$c$H$i
$c$H$i$j
$c$H$i$j$K
[1] 1
toJSON(x)
{"a":[1],"B":[2],"c":{"D":[4],"e":[5],"F g":["NAME"],"H":{"i":{"j":{"K":[1]}}}}}
如何删除JSON键中的任何特殊情况(例如F和g之间的空格以及所有键的下大写字母?)?
我知道一个选项是在馈入toJSON()函数之前对列表进行操作,但是即使在那种情况下,我也不知道如何重命名列表的所有元素(特别是我的列表包含一些data.frames)以及)。有任何正则表达式方法可以做到吗?
答案 0 :(得分:1)
一个重命名列表元素的所有列表的递归函数应该起作用。在此,它会转换为小写字母,并且还会删除所有非字母数字字符(空格,标点符号等)
x <- list(a=1,B=2,C=list(D=4,e=5,'F g'='NAME',H=list(i=list(j=list(K=1)))))
renames <- function(x)
{
cnames <- names(x)
if (is.null(cnames)) return (x)
x1 <- lapply(cnames,function(y) renames(x[[y]]))
if (class(x) %in% "data.frame") x1 <- as.data.frame(x1)
names(x1) <- gsub("[^[:alnum:]]","",tolower(cnames))
return(x1)
}
x1 <- renames(x)
> x1
$a
[1] 1
$b
[1] 2
$c
$c$d
[1] 4
$c$e
[1] 5
$c$fg
[1] "NAME"
$c$h
$c$h$i
$c$h$i$j
$c$h$i$j$k
[1] 1