Преобразование фрейма данных R в JSON при разделении каждой строки в новый объект JSON - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть R-кадр данных, который я хочу преобразовать в JSON, но я хочу, чтобы каждая строка была вставлена ​​в новый объект JSON с именем «traits».Я попытался связать столбец признаков в качестве первого столбца и преобразовать новый фрейм данных в JSON, но это не дает правильного вывода.Я также пытался добавить «черты»: {объект к каждому преобразованному выводу JSON, но это также не удалось.Я пытаюсь работать в рамках dataframe, а затем преобразовать его в JSON, потому что toJSON создает список в скобках [], который я тоже не могу обойти. Я использую jsonlite

color = c('red','blue','green')
fruit = c('apple','orange','grape')
animal = c('cat','dog','chicken')
df<- data.frame(color, fruit, animal)
toJSON(df, pretty= TRUE)

Я хочу, чтобы онвыглядеть так:

[
  { "traits": {
      "color": "red",
      "fruit": "apple",
      "animal": "cat"
  }
    },

1 Ответ

0 голосов
/ 09 февраля 2019

Вот способ:

L <- list(list(traits = as.list(df[1,])), 
          list(traits = as.list(df[2,])),
          list(traits = as.list(df[3,])))

> toJSON(L, pretty = TRUE, auto_unbox = TRUE)
[
  {
    "traits": {
      "color": "red",
      "fruit": "apple",
      "animal": "cat"
    }
  },
  {
    "traits": {
      "color": "blue",
      "fruit": "orange",
      "animal": "dog"
    }
  },
  {
    "traits": {
      "color": "green",
      "fruit": "grape",
      "animal": "chicken"
    }
  }
] 

Чтобы получить этот список L, вы можете сделать

L <- apply(df, 1, function(x) list(traits = as.list(x)))

Другой способ:

df2 <- purrr::transpose(lapply(df, function(x) as.character(x)))
L <- lapply(df2, function(x) list(traits = x))

или

df <- data.frame(color, fruit, animal, stringsAsFactors = FALSE)
L <- lapply(purrr::transpose(df), function(x) list(traits = x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...