|
Запись значения 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. Тему закрываем. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |