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

1. aalu14 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 3033 24.11.22 14:29 Сейчас в теме
(4) Он в структуру пытается читать. Надо структуру с массивом тогда записывать.
8. aalu14 24.11.22 14:30 Сейчас в теме
(7)Да, спасибо, уже допер)
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 3033 25.11.22 11:12 Сейчас в теме
(9) Вот приличный человек в мое бы время просто бы создал текстовую переменную безо всех этих джисонов, сгенерировав текст кодом с конкатенацией строк. Но нет, народ мучается и кушает кактус, теряя десятки часов )))
Не, я не против джисона - тем более тут задача свелась к массиву соответствий и структур и там все примитивно. Но если вдруг затыки, то вспоминайте про простой текст. Тот же XBRL достаточно непросто писать с помощью объектов 1С, а с помощью записи текста - фигня вопрос.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

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

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

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)