Не получается записать JSON

1. 24.11.22 14:00 Сейчас в теме
Добрый день! Необходимо записать массив JSON формата { [<Number>,<Number>,<Number>,<Number>] }.
Делаю так:

Массив = Новый Массив;
Массив.Вставить("114973");
Массив.Вставить("114974");
Массив.Вставить("114975");
Массив.Вставить("114976");

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Массив);
СтрокаJSON = ЗаписьJSON.Закрыть();
Показать


Получаю:[
null,
null,
null,
....

Подскажите, что делаю не так. Заранее спасибо!
Найденные решения
5. spacecraft 24.11.22 14:26 Сейчас в теме
(4) 1С не понимает множество основных контейнеров. Основной контейнер должен быть только один. А тут массив. Оберните массив в структуру.
VoVo; aalu14; starik-2005; +3 Ответить
2. Varitano 24.11.22 14:05 Сейчас в теме
Нужно
Массив.Добавить()
VoVo; Anchoret; +2 Ответить
20. spacecraft 24.11.22 18:04 Сейчас в теме
(19)
Мне именно массив надо возвращать.

Есть еще такой вариант:
[{"договор1": {"1": 1}},{"договор2": {"2": 2}},{"договор3": {"3": 3}}]

Соответственно такой код:
ИтоговыеДанные = Новый Массив;
Для каждого Договор из JSON Цикл
    Детали = Новый Структура;
    Детали.Вставить("policy_no",Номер);
    Детали.Вставить("insuranced_at",Формат(Дата, "ДФ=dd.MM.yyyy"));
    ДанныеДоговоров = Новый Соответствие;
    ДанныеДоговоров.Вставить(Договор,Детали);
    ИтоговыеДанные.Добавить(ДанныеДоговоров);
КонецЦикла; 

ЗаписатьJSON(ЗаписьJSON, ИтоговыеДанные);
СтрокаЗапроса = ЗаписьJSON.Закрыть();
Показать
VoVo; aalu14; +2 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Varitano 24.11.22 14:05 Сейчас в теме
Нужно
Массив.Добавить()
VoVo; Anchoret; +2 Ответить
3. beldieff 24.11.22 14:11 Сейчас в теме
(2)Я и не обратил внимания) Ништяк, в СП индекс должен быть числовым, а тут строку хавает и не давится.
VoVo; aalu14; +2 Ответить
4. aalu14 24.11.22 14:24 Сейчас в теме
Спасибо, теперь прочесть не могу(
СтрокаЗапроса = ЗаписьJSON.Закрыть();
ЧтениеJSON=Новый ЧтениеJSON;

ЧтениеJSON.УстановитьСтроку(СтрокаЗапроса);
JSON=ПрочитатьJSON(ЧтениеJSON);


Ошибка при вызове метода контекста (ПрочитатьJSON)
JSON=ПрочитатьJSON(ЧтениеJSON);
по причине:
Недопустимое состояние потока записи JSON
5. spacecraft 24.11.22 14:26 Сейчас в теме
(4) 1С не понимает множество основных контейнеров. Основной контейнер должен быть только один. А тут массив. Оберните массив в структуру.
VoVo; aalu14; starik-2005; +3 Ответить
6. aalu14 24.11.22 14:29 Сейчас в теме
7. starik-2005 2773 24.11.22 14:29 Сейчас в теме
(4) Он в структуру пытается читать. Надо структуру с массивом тогда записывать.
8. aalu14 24.11.22 14:30 Сейчас в теме
9. aalu14 24.11.22 17:05 Сейчас в теме
Подскажите, как убрать запятую, не понимаю, где она рисуется...
ЗаписьJSON.ЗаписатьНачалоМассива();

Для каждого Договор из JSON Цикл
               ЗаписьJSON.ЗаписатьИмяСвойства(Договор);
		ЗаписьJSON.ЗаписатьНачалоОбъекта();
		ЗаписьJSON.ЗаписатьИмяСвойства("policy_no");
		ЗаписьJSON.ЗаписатьЗначение(Номер);
		ЗаписьJSON.ЗаписатьИмяСвойства("insuranced_at");
		ЗаписьJSON.ЗаписатьЗначение(Формат(Дата, "ДФ=dd.MM.yyyy"));
		ЗаписьJSON.ЗаписатьКонецОбъекта();
КонецЦикла; 

ЗаписьJSON.ЗаписатьКонецМассива();		
СтрокаЗапроса = ЗаписьJSON.Закрыть();
Показать
Прикрепленные файлы:
10. spacecraft 24.11.22 17:15 Сейчас в теме
(9) э... какую запятую? Разделитель элементов структуры? Так это стандарт формата json. Не надо ее убирать.
11. aalu14 24.11.22 17:19 Сейчас в теме
(10) а почему после первого имени свойства ("114973") она не ставится?
12. aalu14 24.11.22 17:20 Сейчас в теме
(10)тот кто принимает джсон попросил убрать эти запятые, а я не понимаю, почему они формируются...Это как бы называние объекта, по логике там не должно быть запятой
13. spacecraft 24.11.22 17:24 Сейчас в теме
(12) а, эта запятая. не сразу увидел. Да это лишняя.
Где-то что-то не так открываете или закрываете.
Первое ЗаписьJSON.ЗаписатьИмяСвойства(Договор); Там нет открытия и закрытия объекта.

И все это можно сделать через ЗаписьJSON (загрузкой подготовленной коллекции). Зачем формировать вручную?
14. aalu14 24.11.22 17:28 Сейчас в теме
(13) Свойство договор: {открываю объект - свойство policy_no, свойство insuranced_at - закрываю объект}
"Первое ЗаписьJSON.ЗаписатьИмяСвойства(Договор); Там нет открытия и закрытия объекта." - а как надо, подскажите ?
15. spacecraft 24.11.22 17:35 Сейчас в теме
(14) У элемента массива нет имен свойств. Он содержит только значения. Имена свойств есть у Структуры. Соответственно сначала необходимо создать ее и закрыть. Как сделано на следующей строке кода для вложенного объекта.
16. aalu14 24.11.22 17:43 Сейчас в теме
(15) Вы про ЗаписатьИмяСвойства ЗаписатьЗначениеСвойства ? Но мне необходимо, чтобы формат был такой
[ договор1:{ }, договор2:{ }, договор3:{ } ]
17. spacecraft 24.11.22 17:47 Сейчас в теме
(16)
Но мне необходимо, чтобы формат был такой
[ договор1:{ }, договор2:{ }, договор3:{ } ]

Глупости. Это прямое нарушение формата json. Это все что угодно, но не json. Да попробуйте на онлайн валидаторах такое проверить.
18. spacecraft 24.11.22 17:51 Сейчас в теме
(17)(16)
Но, если не использовать массив, то вот такой формат:
{"договор1": {"1": 1},"договор2": {"2": 2},"договор3": {"3": 3}}

будет валидным.
И делается просто (в первом приближении на коленке):
ДанныеДоговоров = Новый Соответствие;
Для каждого Договор из JSON Цикл
	Детали = Новый Структура;
	Детали.Вставить("policy_no",Номер);
	Детали.Вставить("insuranced_at",Формат(Дата, "ДФ=dd.MM.yyyy"));
	ДанныеДоговоров.Вставить(Договор,Детали);
КонецЦикла; 

ЗаписатьJSON(ЗаписьJSON, ДанныеДоговоров);
СтрокаЗапроса = ЗаписьJSON.Закрыть();
Показать
19. aalu14 24.11.22 17:53 Сейчас в теме
(15) Мне именно массив надо возвращать. Вы правы, что неверный формат джсон, спасибо большое!
20. spacecraft 24.11.22 18:04 Сейчас в теме
(19)
Мне именно массив надо возвращать.

Есть еще такой вариант:
[{"договор1": {"1": 1}},{"договор2": {"2": 2}},{"договор3": {"3": 3}}]

Соответственно такой код:
ИтоговыеДанные = Новый Массив;
Для каждого Договор из JSON Цикл
    Детали = Новый Структура;
    Детали.Вставить("policy_no",Номер);
    Детали.Вставить("insuranced_at",Формат(Дата, "ДФ=dd.MM.yyyy"));
    ДанныеДоговоров = Новый Соответствие;
    ДанныеДоговоров.Вставить(Договор,Детали);
    ИтоговыеДанные.Добавить(ДанныеДоговоров);
КонецЦикла; 

ЗаписатьJSON(ЗаписьJSON, ИтоговыеДанные);
СтрокаЗапроса = ЗаписьJSON.Закрыть();
Показать
VoVo; aalu14; +2 Ответить
21. aalu14 25.11.22 09:42 Сейчас в теме
(20) Это то, что нужно, спасибо!!!
22. starik-2005 2773 25.11.22 11:12 Сейчас в теме
(9) Вот приличный человек в мое бы время просто бы создал текстовую переменную безо всех этих джисонов, сгенерировав текст кодом с конкатенацией строк. Но нет, народ мучается и кушает кактус, теряя десятки часов )))
Не, я не против джисона - тем более тут задача свелась к массиву соответствий и структур и там все примитивно. Но если вдруг затыки, то вспоминайте про простой текст. Тот же XBRL достаточно непросто писать с помощью объектов 1С, а с помощью записи текста - фигня вопрос.
Оставьте свое сообщение
Вакансии
Ведущий разработчик 1С
Новосибирск
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Ведущий Консультант/Аналитик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Великие Луки
зарплата от 100 000 руб. до 120 000 руб.
Полный день

Программист 1С
Красноярск
зарплата от 160 000 руб. до 180 000 руб.
Полный день