2015-05-05 2 views
2

Я пытаюсь преобразовать R data.frame в json-файл для дальнейшего вызова этого json-файла jQuery в js-коде.Преобразование data.frame в json в R

У меня есть следующий data.frame:

# Input data.frame 
data <- data.frame(Product=c("Prod1","Prod2","Prod3","Prod4"), Val1=c(4,5,2,6.8), Val2=c(6,5,2,7.8), Val3=c(8,5,6,6.7), 
       Description=c("Doritos 1.0 Intel PAV UMA","Stag 1.2 Intel PAV UMA","Pike 1.0 Intel Spectre x360", 
          "Antinori 1.2 Intel PAV UMA")) 

и мне нужно, чтобы преобразовать его в файл JSON, так же, как это:

# Desired Output 
[ 
    ["Product","Val1","Val2","Val3", "Description"], 
    ["Prod1",4,6,8,"Doritos 1.0 Intel PAV UMA"], 
    ["Prod2",5,5,5,"Stag 1.2 Intel PAV UMA"], 
    ["Prod3",2,2,6,"Pike 1.0 Intel Spectre x360"], 
    ["Prod4",6.8,7.8,6.7,"Antinori 1.2 Intel PAV UMA"] 
] 

Я пытался использовать toJSONjsonlite пакет, но выход не тот, который мне нужен для вывода.

Не могли бы вы мне помочь, как бы я мог преобразовать исходный data.frame в желаемый вывод выше. Большое спасибо в форварде.

ответ

0

Вы можете использовать unname, чтобы получить квадратные скобки в вашем выводе JSon:

library(jsonlite) 
data <- rbind(names(data), sapply(data, as.character)) 
toJSON(unname(data), pretty = T) 
# [ 
# ["Product", "Val1", "Val2", "Val3", "Description"], 
# ["Prod1", "4", "6", "8", "Doritos 1.0 Intel PAV UMA"], 
# ["Prod2", "5", "5", "5", "Stag 1.2 Intel PAV UMA"], 
# ["Prod3", "2", "2", "6", "Pike 1.0 Intel Spectre x360"], 
# ["Prod4", "6.8", "7.8", "6.7", "Antinori 1.2 Intel PAV UMA"] 
# ] 

Альтернатива:

df.toJSON <- function(data) { 
    out <- capture.output(write.csv(data, row.names = FALSE, eol = "],\n")) 
    out <- paste(paste0(" [", out, collapse = "\n")) 
    out <- substr(out, 0, nchar(out)-1) 
    out <- paste0("\n[\n", out, "\n]") 
    return(out) 
} 
cat(df.toJSON(data)) 
# [ 
# ["Product","Val1","Val2","Val3","Description"], 
# ["Prod1",4,6,8,"Doritos 1.0 Intel PAV UMA"], 
# ["Prod2",5,5,5,"Stag 1.2 Intel PAV UMA"], 
# ["Prod3",2,2,6,"Pike 1.0 Intel Spectre x360"], 
# ["Prod4",6.8,7.8,6.7,"Antinori 1.2 Intel PAV UMA"] 
# ] 
+0

Спасибо за быстрый ответ ... но если я попробовать <- toJSON (unname (data), pretty = T), он привел к этому сообщению об ошибке: Ошибка в FUN (newX [, i], ...): x и y должны иметь такую ​​же длину. – martinkabe

+0

Обновление пакета 'jsonlite'? Использовать 'jsonlite :: toJSON'? Этот пример отлично работает. Я использую версию 0.9.16. – lukeA

+0

О, да, вы правы, ему необходимо обновить пакет jsonlite. О, может быть, одна вещь, которую я не заметил: Как я мог изменить предложенный сценарий, чтобы это: [ «Продукт», «Val1», «Val2», «val3», «Описание»], в первой строке? – martinkabe

Смежные вопросы