Мне нужно создать файл JSON, который соответствует схеме в конце публикации в R. Мне нужно, чтобы он исходил из файла CSV, который я сгенерирую, и его можно преобразовать в любой формат, который упростит достижение результата. Файл CSV будет динамическим по своей природе, в приведенном ниже примере единственные переменные, которые будут меняться для данного файла, это:
Мой CSV в первой итерации отформатирован как таковой и может иметь несколько строк:
{
"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 даты, по крайней мере, с одним городом, встречающимся в обе даты, а затем обновлял JSON, чтобы он соответствовал входным данным. Таким образом, мы можем быть уверены, что будет вложено, а что нет. (Если вы изменили последнюю строку ввода на 2019-03-15 и обновили JSON, чтобы он соответствовал вводу, я думаю, это было бы красиво и ясно)
@GregorThomas, - я добавил обновления, дата всегда будет одинаковой для каждой строки при каждом создании файла. Спасибо.
Что происходит, когда есть другая дата?
@onyambu Это будет другой файл с другими перестановками переменных. Каждый день мне нужно загружать этот JSON, каждый файл привязан к дате и всегда будет одинаковым для каждого файла.
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, как удалить «[» в начале и «]» в конце, сохранив при этом все остальное, возможно ли это? Схема, с которой я работаю, начинается с { и заканчивается на }.
Вы можете написать небольшую функцию для удаления первого и последнего символов строки, remove_first_last = function(x) {substr(x, start = 2, stop = nchar(x) - 1)}
, и вставить ее в конец, ... |> remove_first_last()
.
спасибо за помощь. Работая с вашим решением, я могу решить свою проблему и, в свою очередь, ежедневно экономить себе огромное количество времени. Ценить это! :)
Подумайте о том, чтобы иметь 2-3 строки, чтобы можно было понять, как это работает.