#r #jsonlite
#r #jsonlite
Вопрос:
У меня есть следующая структура R
list(Message = list(MessageType = "WARNING", MessageSubType = "USERNAME",
MessageID = "105"), Message = list(MessageType = "WARNING",
MessageSubType = "PASSWORD", MessageID = "106"))
Я хочу преобразовать его в это, используя jsonlite::toJSON(auto_unbox = T)
{"Message":{"MessageType":"WARNING","MessageSubType":"USERNAME","MessageID":"105"},"Message_1":{"MessageType":"WARNING","MessageSubType":"PASSWORD","MessageID":"106"}}
Однако вместо «Message_1» jsonlite увеличивается на «Message.1».
Проблема: это может быть в нескольких структурах, поэтому мне нужно что-то, что может быть повторяемым независимо от имен ключей. Не уверен, jsonlite::toJSON()
может ли принять аргумент, чтобы указать, что он ведет себя как желаемый результат выше. Любая помощь приветствуется!
Ответ №1:
Если нам нужно изменить повторяющиеся имена из параметра по умолчанию .1
и т. .2
Д., Используйте
names(lst1) <- make.unique(names(lst1), sep="_")
Теперь примените toJSON
jsonlite::toJSON(lst1, auto_unbox = TRUE)
#{"Message":{"MessageType":"WARNING","MessageSubType":"USERNAME","MessageID":"105"},"Message_1":{"MessageType":"WARNING","MessageSubType":"PASSWORD","MessageID":"106"}}
По сути, повторяющиеся имена изменяются make.unique
при вызове data.frame
, и параметр по умолчанию sep="."
make.unique(имена, sep = «.»)
данные
lst1 <- list(Message = list(MessageType = "WARNING", MessageSubType = "USERNAME",
MessageID = "105"), Message = list(MessageType = "WARNING",
MessageSubType = "PASSWORD", MessageID = "106"))
Комментарии:
1. это выглядит хорошо. Я пытаюсь выяснить, разрешит ли jsonlite передачу необязательного параметра для его использования make.unique . вместо этого я разветвляю и изменяю для собственного использования, а затем возвращаюсь к основному проекту.
2. Я открыл PR для этого. github.com/jeroen/jsonlite/pull/340