Имя: Пароль:
1C
1С v8
Запись значения Null в файл JSON без кавычек
Ø (Волшебник 07.03.2024 22:29)
,
0 happysan
 
07.03.24
11:36
Доброго времени суток!

Можно ли сделать так, чтобы значение Null записывалось в JSON без кавычек? Например, значение может принимать либо строковый вид в кавычках, либо когда Null, то без кавычек. И как это можно реализовать?
1 lubitelxml
 
07.03.24
11:40
NULL - отсутствие значения, по логике - если там null - то вообще значение не надо в json записывать. Это по логике )
2 lubitelxml
 
07.03.24
11:46
3 happysan
 
07.03.24
11:46
(1) Нужно заказчику.
4 AlexKimp
 
07.03.24
11:46
(1) +1. вообще, с точки зрения философии JSON, если значение null, то параметр необязательный. Принимающая апиха все равно распарсит такое значение в дефолтную инициализацию (объектные типы в налл).

Но если очень хочется, то Структура.Вставить("somePar", Неопределено);
5 p-soft
 
07.03.24
11:46
(0) соберите свой вариант json. только понимать его никто не будет
6 happysan
 
07.03.24
11:47
(2) Читал это перед созданием данной темы. Это не про наш случай.
7 AlexKimp
 
07.03.24
11:47
(3) очень странный заказчик...
8 arsik
 
гуру
07.03.24
11:48
(6) У меня нормально записывает. А с Null даже преобразовать не может.
Данные = Новый Структура("Дата,Пустое", ТекущаяДата(), Неопределено);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
Результат = ЗаписьJSON.Закрыть();

Результат
{
"Дата": "2024-03-07T12:47:24",
"Пустое": null
}
9 happysan
 
07.03.24
11:50
(7) Есть такое.
(8) У нас XDTO-пакеты используются.
10 AlexKimp
 
07.03.24
11:51
(8) +1 такой же результат. с Неопределено четко пишется null
11 happysan
 
07.03.24
11:51
(8) И там в этом параметре по результатам запроса может быть и другой тип значения, например, строка.
12 arsik
 
гуру
07.03.24
11:52
(9) Ну так у вас в XDTO наверно указано, что только строка.
13 happysan
 
07.03.24
11:52
(10) В курсе, но вопрос же в другом.
14 happysan
 
07.03.24
11:58
Свойство XDTO-пакета указано как "string (http://www.w3.org/2001/XMLSchema)". Есть ли тип, который может принимать и строковые значения и Null?
15 Fragster
 
гуру
07.03.24
12:14
(14) галка "возможно пустое"
16 happysan
 
07.03.24
12:21
(15) Это ещё давно испытывалось, но по причине:
Ошибка установки значения свойства 'deal_order_number_1C'
по причине:
Ошибка отображения типов:
Отображение типа 'Null' в тип '{http://www.w3.org/2001/XMLSchema}string'
17 Garikk
 
07.03.24
13:14
(7) странный что хочет null? ничего странного нет, стоит в сериалайзере required у поля и при этом оно nullable, вот он и требует чтобы все поля были в пакете
а чтобы поменять или поправить надо задачу на доработку, а для этого нет бюджета например

p.s. я работал в таком проекте, очень знакомо
p.p.s. как раз с одинесниками спорили по схожим вопросам
18 СвинТуз
 
07.03.24
13:28
(0)
Запиши как пишет.
Открой как текстовый
прочти в строку
Функция СтрЗаменить()
верни в файл.
Будут спрашивать, говори всем что так и было.

Любой каприз за его деньги.
еще те извращения?
19 СвинТуз
 
07.03.24
13:30
(0) (18)
Наверняка есть что то более красивое.
Но это вникать надо. Я тут не за этим.
Заглянул. Что делается посмотреть.
20 Fragster
 
гуру
07.03.24
13:42
(18) фу таким быть
21 СвинТуз
 
07.03.24
13:45
(20)
Каким?
Старым, жадным, ленивым?
22 СвинТуз
 
07.03.24
13:46
(20)
Чем не нравится простое решение?
23 Fragster
 
гуру
07.03.24
13:49
Объ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://client.account", "Склад" ));

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

Объ.Ссылка = Новый УникальныйИдентификатор();
Объ.ДоступноДляВыбора = Неопределено; // вот это "возможно пустое"

ФабрикаXDTO.ЗаписатьJSON(Запись, Объ);

XML = Запись.Закрыть();

{
"#value": {
"Ссылка": "cf6148ce-7dc8-4226-9a71-ba4664d028ab",
"ДоступноДляВыбора": null
}
}
24 happysan
 
07.03.24
14:16
(23) Что это за тип "http://client.account"? Он может и строковое значение принимать? Его разве можно указать в дереве свойств XDTO-пакета в конфигураторе?
25 happysan
 
07.03.24
14:26
(23) В общем, как я и предполагал, это можно реализовать только программно устанавливая нужный тип параметра json.
26 happysan
 
07.03.24
14:28
Есть, например, anyType тип в пространстве '{http://www.w3.org/2001/XMLSchema}string' . Никто не использовал? Может подойдёт?
27 Fragster
 
гуру
07.03.24
16:01
(24) это пространство имен. тип "склад" с двумя свойствами, у одного из них (угадай у какого) установлена галка "возможно пустое"
28 Fragster
 
гуру
07.03.24
16:02
(25) если читаешь без фабрики и прочих наворотов, то тебе проще было бы взять готовый json, прочитать и посмотреть, в какую структуру оно развернется.
29 happysan
 
07.03.24
16:05
(28) Не читаю, а создаю новый файл json.
30 happysan
 
07.03.24
16:07
(27) Ну это понятно, что пространство имён. Свойство то одно,  ладно, уже описывал ситуацию.
31 Fragster
 
гуру
07.03.24
16:09
(30)не понимаю. вот так тоже работает:
Запись = Новый ЗаписьJSON();
Запись.УстановитьСтроку();


ЗаписатьJSON(Запись, Неопределено);

XML = Запись.Закрыть();
32 Fragster
 
гуру
07.03.24
16:09
это если без контроля совсем
33 Fragster
 
гуру
07.03.24
16:09
если же с xdto - то галочка "возможно пустое" и неопределено дают null
34 happysan
 
07.03.24
16:12
(23) У тебя свойство "ДоступноДляВыбора" имеет только один тип (угадай какой)? И см. (16).
35 happysan
 
07.03.24
16:14
(33) Как уже пояснял там в результате выполнения запроса 1С на выходе может быть либо строка, либо Null и это значение затем присваивается в коде свойству параметра xdto.
36 ПёсДог
 
07.03.24
19:55
(0) Null в 1С и null в JSON - это разные сущности.
Аналог null в JSON - это Неопределено в 1С.
Если у тебя нет обработчика, который конвертирует Null в Неопределено, то система его автоматически конвертирует в строку.
Ты хочешь чтобы Null превращался волшебным образом в null, это все равно что хотеть чтобы число 8 превращалось в 9. Нет такого встроенного правила. Нужно самому сконвертировать данные перед созданием JSON, или поправить итоговую строку после создания JSON. Лучше первый вариант.

Замени Null на Неопределено.
37 ПёсДог
 
07.03.24
20:02
(0) ЗЫ: Твой вопрос изначально неверен. Если в JSON записать Null без кавычек, то будет ошибка. JSON не понимает такое значение.

Это все равно что пытаться записать в JSON букву "О" без кавычек вместо цифры 0.

Я понимаю, что для тебя они похожи. Но в программировании так делать нельзя.
38 happysan
 
07.03.24
22:00
(36) Всё верно. Я в курсе этого. См. (25).
(37) "...Это все равно что пытаться записать в JSON букву "О" без кавычек вместо цифры 0. Я понимаю, что для тебя они похожи. Но в программировании так делать нельзя." - Они для меня далеко не похожи. Я к этому и клонил, что: "...Если в JSON записать Null без кавычек, то будет ошибка. JSON не понимает такое значение.".
Всем спасибо.
39 happysan
 
07.03.24
22:09
(37) "Но в программировании так делать нельзя." - разумеется)))
40 happysan
 
07.03.24
22:22
(36) "Если у тебя нет обработчика, который конвертирует Null в Неопределено, то система его автоматически конвертирует в строку" - не конвертирует, см. (16).
"Ты хочешь чтобы Null превращался волшебным образом в null, это все равно что хотеть чтобы число 8 превращалось в 9. Нет такого встроенного правила" - не было подобных задач и ожиданий. А лишь передача Null в Null.

Тему закрываем.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.