R jsonlite для создания json .1 для повторяющихся имен ключей

#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