using to JSON: как получить массив, вложенный в data.frame, в объект JSON - PullRequest
1 голос
/ 16 июня 2020

Я пытаюсь преобразовать data.frame в JSON текст. Как я могу включить массив в этот data.frame? Т.е. переменная характеристика должна содержать несколько элементов. Мне это не удается.

Вот мой код:

data <- data.frame(sequenceNbr = c(1:3),
                   requestTypeCode = "MR001",
                   managementStartingDate = format(Sys.Date(),"%Y-%m-%d"),
                   TopicCode = "TH02",
                   Nbr = c("1760448", "6580364", "1391363"),
                   TypeCode = "R003008",
                   char1 = "CK001001", char2 = "CK001002",
                   stringsAsFactors = FALSE) %>%
  group_by(sequenceNbr) %>%
  nest( Assignment=c(TopicCode),
        entity = c(Nbr),
        ToControl = c(TypeCode),
        characteristics = c(char1,char2)
        ) 


data <- data %>%
  mutate(   Assignment = purrr::map(Assignment, as.list),
          entity = purrr::map(entity, as.list)) 


json <- jsonlite::toJSON(list(`DefList`=data),
                         auto_unbox = TRUE, pretty = TRUE)

Это дает как результат

{
  "DefList": [
    {
      "sequenceNbr": 1,
      "requestTypeCode": "MR001",
      "managementStartingDate": "2020-06-16",
      "Assignment": {
        "TopicCode": "TH02"
      },
      "entity": {
        "Nbr": "1760448"
      },
      "ToControl": [
        {
          "TypeCode": "R003008"
        }
      ],
      "characteristics": [
        {
          "char1": "CK001001",
          "char2": "CK001002"
        }
      ]
    },
    {
      "sequenceNbr": 2,
      "requestTypeCode": "MR001",
      "managementStartingDate": "2020-06-16",
      "Assignment": {
        "TopicCode": "TH02"
      },
      "entity": {
        "Nbr": "6580364"
      },
      "ToControl": [
        {
          "TypeCode": "R003008"
        }
      ],
      "characteristics": [
        {
          "char1": "CK001001",
          "char2": "CK001002"
        }
      ]
    }
  ]
} 

То, что я хочу в качестве вывода, это (есть разница в элементе характеристик):

{
  "DefList": [
    {
      "sequenceNbr": 1,
      "requestTypeCode": "MR001",
      "managementStartingDate": "2020-06-16",
      "Assignment": {
        "TopicCode": "TH02"
      },
      "entity": {
        "Nbr": "1760448"
      },
      "ToControl": [
        {
          "TypeCode": "R003008"
        }
      ],
      "characteristics": [
          "CK001001",
          "CK001002"
      ]
    },
    {
      "sequenceNbr": 2,
      "requestTypeCode": "MR001",
      "managementStartingDate": "2020-06-16",
      "Assignment": {
        "TopicCode": "TH02"
      },
      "entity": {
        "Nbr": "6580364"
      },
      "ToControl": [
        {
          "TypeCode": "R003008"
        }
      ],
      "characteristics": [
          "CK001001",
          "CK001002"
      ]
    }
  ]
} 

Он также должен работать, когда характеристика содержит только одно значение. Любые идеи? Я считаю, что структура data.frame является ограничивающим фактором, поскольку она не может содержать массив. Я вижу в этом сообщении: https://blog.exploratory.io/working-with-json-data-in-very-simple-way-ad7ebcc0bb89, что это правильный синтаксис JSON, но мне не удается его получить. Заранее благодарим за помощь.

...