Коллеги, добрый день.
Есть файл JSON с простой структурой. Массив, а в нем объекты с двумя свойствами.
Количество объектов массиве может быть очень много, и обработкой добавляются ещё. Можно ли как-то дописать необходимые объекты в конец массива файла, а не перезаписывать всё содержимое файла каждый раз?
Есть файл JSON с простой структурой. Массив, а в нем объекты с двумя свойствами.
[
{
"Свойство_1": "Значение_1",
"Свойство_2": "Значение_2"
},
{
"Свойство_1": "Значение_1",
"Свойство_2": "Значение_2"
}
]
{
"Свойство_1": "Значение_1",
"Свойство_2": "Значение_2"
},
{
"Свойство_1": "Значение_1",
"Свойство_2": "Значение_2"
}
]
Количество объектов массиве может быть очень много, и обработкой добавляются ещё. Можно ли как-то дописать необходимые объекты в конец массива файла, а не перезаписывать всё содержимое файла каждый раз?
По теме из базы знаний
- Перетаскивание файлов в поле HTML (JavaScript)
- Наука о чеках. Глава 2. Обработка для просмотра структуры и значений параметров кассовых чеков в json-файле
- Валидация JSON через XDTO (включая массивы)
- Загрузка из файла JSON в документы Перенос данных сведений о доходах сотрудников
- Про файловые потоки: работа с любыми данными и в любом количестве
Найденные решения
Короче, самому любопытно стало. Исходное содержание файла-ЖСОНа взял Ваше, потом кнопок понажимал и в файрфоксе итоговый ЖСОН открыл - проверил, ошибок ЖСОНа не выдано.
Процедура ТестФайлПотокНаСервере()
Текст = ",{
|""Свойство_1"": ""Значение_1"",
|""Свойство_2"": ""Значение_2""
|}
|]";
Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки(Текст);
ФП = Новый ФайловыйПоток("t:\tmp\jsn.json", РежимОткрытияФайла.Дописать);
ФП.Перейти(-1, ПозицияВПотоке.Текущая);
ФП.Записать(Буфер ,0, Буфер.Размер);
ФП.Закрыть();
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) В случае с JSON и другими форматами сериализации данных, совсем не читать файл не получится, т.к. в конце файла содержатся закрывающие теги, а вам нужно "вклиниваться" до этих тегов.
Но если вы прям уверены, что вам нужно только дописать файл, то:
Но если вы прям уверены, что вам нужно только дописать файл, то:
Поток = Новый ЗаписьТекста(ПолноеИмяФайла, , , , Истина);
Поток.Записать("Строка")
поток.ЗаписатьСтроку("Строка");
........
Поток.Закрыть();
(1) просто дописать не читая не получится. По этому формат json мало подходит для ведения логов.
Тут все зависит от того, как этот файл используется дальше для чтения.
Можно предложить такой вариант:
Записывать структуры каждый раз в отдельный файл (скажем с инкрементацией в названии).
При необходимости использования или по заданному периоду, скриптом собирать из разных файлов в единый.
Тут все зависит от того, как этот файл используется дальше для чтения.
Можно предложить такой вариант:
Записывать структуры каждый раз в отдельный файл (скажем с инкрементацией в названии).
При необходимости использования или по заданному периоду, скриптом собирать из разных файлов в единый.
Запись = Новый ЗаписьJSON;
Запись.ОткрытьФайл("c:\temp\simpleWrite.json");
Данные = Новый Структура;
Данные.Вставить("ДлинаЗаписи", 20);
Данные.Вставить("КлючЗаписи", "abcdefgh");
Данные.Вставить("ДатаИзменения", ТекущаяДата());
ЗаписатьJSON(Запись, Данные, );
Запись.Закрыть();
Показать
Последний символ в файле заменяем на запятую, дальше, думаю, сами допилите:
&НаСервере
Процедура ТестФайлПотокНаСервере()
ФП = Новый ФайловыйПоток("t:\tmp\jsn.json", РежимОткрытияФайла.Дописать);
ФП.Перейти(-1, ПозицияВПотоке.Конец);
ФП.Записать(ПолучитьБуферДвоичныхДанныхИзСтроки(","),0,1);
КонецПроцедуры
Короче, самому любопытно стало. Исходное содержание файла-ЖСОНа взял Ваше, потом кнопок понажимал и в файрфоксе итоговый ЖСОН открыл - проверил, ошибок ЖСОНа не выдано.
Процедура ТестФайлПотокНаСервере()
Текст = ",{
|""Свойство_1"": ""Значение_1"",
|""Свойство_2"": ""Значение_2""
|}
|]";
Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки(Текст);
ФП = Новый ФайловыйПоток("t:\tmp\jsn.json", РежимОткрытияФайла.Дописать);
ФП.Перейти(-1, ПозицияВПотоке.Текущая);
ФП.Записать(Буфер ,0, Буфер.Размер);
ФП.Закрыть();
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот