将csv的R文件夹放入一个JSON数组中

时间:2016-11-03 11:52:58

标签: json r csv

我有一个csv的文件夹:

 Art.csv
 Cars.csv
 Food.csv

每个csv都有一个名为words

的列

我想遍历文件夹并使用列的内容并使用标题创建一些格式为的JSON:

{
    "Art" : ['word 1', 'word 2'],
    "Cars" : ['word 1'],
    "Food" : ['word 1', 'word 2', 'word 3']
}

以下是一些测试数据:

file_list <- list.files()
file_list <- c("Art.csv", "Cars.csv", "Food.csv")
test <- data.frame(words = c("Word 1", "Word 2"))
lapply(file_list, function(x) write.csv(test, x, row.names = F))

到目前为止,我已经得到了:

files <- list.files(path="sec", pattern=".csv", recursive = F)

for(i in files){s <- read.csv(paste0("Z:/sec/phrases/",i), stringsAsFactors = F, strip.white = T)
  s$words <- trim(s$words)
  t <- as.vector(s$words)
  t <- iconv(t, "UTF-8", "UTF-8", sub='')
  t <- toJSON(t)
  write(paste0("Z:/sec/json/",i,".json"))}

trim是我创建的一个函数,因为strip.white奇怪地在循环中没有工作。

trim <- function (x) gsub("^\\s+|\\s+$", "", x)

以上简单地将列写入JSON并将文本保存到文件夹中。

将名称从.csv.json更改为.json

for(i in list.files("Z:/sec/json", full.names = T)){file.rename(from=i,to=sub(pattern=".csv.json",replacement=".json",i))}

可能有一种完全不同的方法,这种方法比我更开放。我有大约5000个文件。

编辑让我试着更清楚。

我设法创建的是一个包含json文件的文件夹,如:

Art.json
Cars.json
Food.json

Art.json看起来像:

['word 1', 'word 2']

现在我要做的是将所有这些文件合并为一个大的json,如:

 {
        "Art" : ['word 1', 'word 2'],
        "Cars" : ['word 1'],
        "Food" : ['word 1', 'word 2', 'word 3']
    }

1 个答案:

答案 0 :(得分:2)

您是否可以在下次添加一个可以重复使用的示例,就像我在代码中所做的那样。我找到了以下解决方案,希望它对您有用:

file_list <- list.files()
file_list <- c("Art.csv", "Cars.csv", "Food.csv")
# Make an example that can be used
test <- data.frame(words = c("Word 1", "Word 2"))
lapply(file_list, function(x) write.csv(test, x, row.names = F))
list_df <-lapply(file_list, function(x) read.csv(x))
one_list <- lapply(list_df, function(x) x$words)
names(one_list) <- gsub(".csv","",file_list)
toJSON(one_list)
> toJSON(one_list)
[1] "{\"Art\":[\"Word 1\",\"Word 2\"],\"Cars\":[\"Word 1\",\"Word 2\"],\"Food\":[\"Word 1\",\"Word 2\"]}"