Как я могу создать JSON в R для соответствия этой схеме?

Мне нужно создать файл JSON, который соответствует схеме в конце публикации в R. Мне нужно, чтобы он исходил из файла CSV, который я сгенерирую, и его можно преобразовать в любой формат, который упростит достижение результата. Файл CSV будет динамическим по своей природе, в приведенном ниже примере единственные переменные, которые будут меняться для данного файла, это:

  1. день
  2. cityName — может быть несколько cityName
  3. Тип — каждое имя города может иметь несколько типов.
  4. цена - каждый тип будет иметь одну цену
  5. заказ - Каждый тип будет иметь один заказ

Мой CSV в первой итерации отформатирован как таковой и может иметь несколько строк:

день название города Тип цена заказ 2019-03-14 Город1 1 5 50 2019-03-14 Город1 2 10 75 2019-03-14 Город2 1 10 50 2019-03-14 Город2 2 15 75 2019-03-14 Город2 3 20 100
{
  "day": "2019-03-14",
  "city": [
    {
      "cityName": "city1",
      "FreightA": [
        {
          "Type": 1,
          "FreightSegments": [
            {
              "price": 10,
              "order": 50
            }
          ]
          
          "Type": 2,
          "FreightSegments": [
            {
              "price": 10,
              "order": 75
            }
          ]
        }
      ]
      "cityName": "city2",
      "FreightA": [
        {
          "Type": 1,
          "FreightSegments": [
            {
              "price": 10,
              "order": 50
            }
          ]
          
          "Type": 2,
          "FreightSegments": [
            {
              "price": 15,
              "order": 20
            }
            
            "Type": 3,
            "FreightSegments": [
              {
                "price": 20,
                "order": 100
              }
            ]
          ]
        }
      ]
    }
  ]
}

Я просмотрел соответствующие сообщения JSON и ряд проб и ошибок и не могу его создать. Будем очень признательны за любые рекомендации/советы/рекомендации по рабочему процессу.

Спасибо,

Подумайте о том, чтобы иметь 2-3 строки, чтобы можно было понять, как это работает.

Onyambu 05.04.2023 18:50

Я добавил несколько строк, это поможет?

tpscp 05.04.2023 18:56

Я бы предложил, чтобы ваш пример охватывал 2 даты, по крайней мере, с одним городом, встречающимся в обе даты, а затем обновлял JSON, чтобы он соответствовал входным данным. Таким образом, мы можем быть уверены, что будет вложено, а что нет. (Если вы изменили последнюю строку ввода на 2019-03-15 и обновили JSON, чтобы он соответствовал вводу, я думаю, это было бы красиво и ясно)

Gregor Thomas 05.04.2023 19:00

@GregorThomas, - я добавил обновления, дата всегда будет одинаковой для каждой строки при каждом создании файла. Спасибо.

tpscp 05.04.2023 19:15

Что происходит, когда есть другая дата?

Onyambu 05.04.2023 19:22

@onyambu Это будет другой файл с другими перестановками переменных. Каждый день мне нужно загружать этот JSON, каждый файл привязан к дате и всегда будет одинаковым для каждого файла.

tpscp 05.04.2023 19:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
library(jsonlite)
library(tidyr)

nest(df, FreightSegments = c(price, order)) |>
  nest(FreightA = c(Type, FreightSegments)) |>
  nest(city = c(cityName, FreightA)) |> 
  toJSON(pretty = TRUE)
# [
#   {
#     "day": "2019-03-14",
#     "city": [
#       {
#         "cityName": "City1",
#         "FreightA": [
#           {
#             "Type": 1,
#             "FreightSegments": [
#               {
#                 "price": 5,
#                 "order": 50
#               }
#             ]
#           },
#           {
#             "Type": 2,
#             "FreightSegments": [
#               {
#                 "price": 10,
#                 "order": 75
#               }
#             ]
#           }
#         ]
#       },
#       {
#         "cityName": "City2",
#         "FreightA": [
#           {
#             "Type": 1,
#             "FreightSegments": [
#               {
#                 "price": 10,
#                 "order": 50
#               }
#             ]
#           },
#           {
#             "Type": 2,
#             "FreightSegments": [
#               {
#                 "price": 15,
#                 "order": 75
#               }
#             ]
#           },
#           {
#             "Type": 3,
#             "FreightSegments": [
#               {
#                 "price": 20,
#                 "order": 100
#               }
#             ]
#           }
#         ]
#       }
#     ]
#   }
# ] 

Используя этот ввод:

df = read.table(text = 'day     cityName    Type    price   order
2019-03-14  City1   1   5   50
2019-03-14  City1   2   10  75
2019-03-14  City2   1   10  50
2019-03-14  City2   2   15  75
2019-03-14  City2   3   20  100', header =T)

Спасибо за ответ @GregorThomas, как удалить «[» в начале и «]» в конце, сохранив при этом все остальное, возможно ли это? Схема, с которой я работаю, начинается с { и заканчивается на }.

tpscp 07.04.2023 05:04

Вы можете написать небольшую функцию для удаления первого и последнего символов строки, remove_first_last = function(x) {substr(x, start = 2, stop = nchar(x) - 1)}, и вставить ее в конец, ... |> remove_first_last().

Gregor Thomas 08.04.2023 15:52

спасибо за помощь. Работая с вашим решением, я могу решить свою проблему и, в свою очередь, ежедневно экономить себе огромное количество времени. Ценить это! :)

tpscp 10.04.2023 23:02

Другие вопросы по теме