Как «назвать» каждый JSON объект - PullRequest
1 голос
/ 15 февраля 2020

Я уверен, что это довольно простая вещь, но я не могу понять это.

У меня есть массив данных в R, который выглядит так:

a   b   c
1   9   J
2   5   K

Когда я использую JSON и передаю фрейм данных как именованный список

val <- toJSON(list( table = df), pretty = TRUE)

, я получаю:

{  "table":[
   {
     {
       "a":"1",
       "b":"9",
       "c":"J"
     }
   },
   {
     {
       "a":"2",
       "b":"5",
       "c":"K"
     }
   }
 ]
}

Как я могу получить каждый JSON объект, который будет назван " запись ", как показано ниже:

{  "table":[
   {
     "entry":{
       "a":"1",
       "b":"9",
       "c":"J"
     }
   },
   {
     "entry":{
       "a":"2",
       "b":"5",
       "c":"K"
     }
   }
 ]
}

1 Ответ

1 голос
/ 20 февраля 2020

Чтобы получить нужную структуру, это немного сложно, потому что объект {"entry":{"a":1,"b":9,"c":"J"}}

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

lst <- list( list(a = 1, b = 9, c = "J") )
attr( lst, "names" ) <- "entry"

toJSON( lst, auto_unbox = TRUE )
# {"entry":{"a":1,"b":9,"c":"J"}}

Поэтому каждая строка ваш data.frame должен быть именованным списком

res <- lapply( seq_len( nrow( df ) ), function(i) {
  lst <- list( as.list( df[i, , drop = F] ) )
  attr( lst, "names" ) <- "entry"
  lst
})

## add the 'table'
res <- list( table = res )

toJSON( res, auto_unbox = TRUE, pretty = TRUE )
# {
#   "table": [
#     {
#       "entry": {
#         "a": 1,
#         "b": 9,
#         "c": "J"
#       }
#     },
#     {
#       "entry": {
#         "a": 2,
#         "b": 5,
#         "c": "K"
#       }
#     }
#   ]
# } 

...