Страница 1 из 1

cJSON: Запись булевых значений

Добавлено: 17 Ноябрь 2022, 8:10
Игорь Столяров
Привет всем !

Спасите и помогите ! Упёрся в элементарную вещь.
Нужно выгрузить незатейливую строку вида: {"Login":"Igor","FlagClose":False}

Код: Выделить всё

 Users   Group
Login     String('Igor')
FlagClose Byte(False)
        end
jParam  &cJson
  Code
  jParam &= json::CreateObject(Users,False,'[{{"name":"FlagClose","isBool":true}]')  ! isBool - это моя фантазия !
  Message(jParam.ToString())  ! -->>  {"Login":"Igor","FlagClose":0}
Можно ли (как-то) формировать булевы значения через json::CreateObject() ?
Метод: cJSON.AddBoolToObject() видел, но это ручное формирование.
А у меня семиэтажные структуры с массивами ... :( Заранее спасибо за помощь !

P/S: В примерах и описании тема булевых значений вообще не раскрыта. :nono:

cJSON: Запись булевых значений

Добавлено: 17 Ноябрь 2022, 9:39
Admin
В TFieldRule добавить IsBool BYTE
а потом в

Код: Выделить всё

json::CreateObject            PROCEDURE(*GROUP grp, BOOL pNamesInLowerCase = TRUE, <STRING options>)
где то между этих строк

Код: Выделить всё

            ndx += nestedItem.GetArraySize(TRUE)  !- skip fields from nested groups
          ELSIF ISSTRING(fldValue)
вставить

Код: Выделить всё

          ELSIF fldRules.IsBool
            item.AddBoolToObject(jsonName, fldValue)
Что то мне кажется что этого хватит и ваша опция isBool отработает

cJSON: Запись булевых значений

Добавлено: 17 Ноябрь 2022, 9:47
Admin
Вот такой json получается

Код: Выделить всё

{"LOGIN":"Igor","FLAGCLOSE":false}

cJSON: Запись булевых значений

Добавлено: 17 Ноябрь 2022, 9:51
Игорь Столяров
Ой ! Что-то я очкую изменять такой сложный класс ... Неизвестно где аукнется ... :(

cJSON: Запись булевых значений

Добавлено: 17 Ноябрь 2022, 9:53
Admin
Ой да прекрати.
Кинь его в папку с программой и там поменяй.
Чему там аукаться то?
Сформируй две версии JSON файла и сделай DIFF. Сам увидишь

P.S. Ну или жди Дедушку :)

cJSON: Запись булевых значений

Добавлено: 17 Ноябрь 2022, 12:49
Дед Пахом
Отличная идея! Добавлю после обеда.

cJSON: Запись булевых значений

Добавлено: 17 Ноябрь 2022, 16:08
Дед Пахом
Выложил v1.23.

cJSON: Запись булевых значений

Добавлено: 17 Ноябрь 2022, 16:18
Игорь Столяров
Спасибо ! :)

cJSON: Запись булевых значений

Добавлено: 18 Ноябрь 2022, 10:01
Игорь Столяров
А ведь можно сразу определять тип поля, как Вы рассказали вот здесь: viewtopic.php?t=4481
И если он

Код: Выделить всё

MyGroup Group
...
Flag  Bool
...
end

то и выгружать его сразу в JSON как Bool по умолчанию ...
И без вариантов. Bool он везде и есть Bool (True / False). Здесь нет суперпозиции. ;)
Сейчас приходится задавать формат выгрузки для всех флагов - но это ведь и так есть в их объявлении.

cJSON: Запись булевых значений

Добавлено: 18 Ноябрь 2022, 10:38
Admin
Игорь Столяров писал(а): 18 Ноябрь 2022, 10:01 Сейчас приходится задавать формат выгрузки для всех флагов
Аппетит приходит во время еды! :lol:

cJSON: Запись булевых значений

Добавлено: 18 Ноябрь 2022, 10:50
Дед Пахом
Если бы... BOOL это не отдельный тип, а другое наименование LONG.

cJSON: Запись булевых значений

Добавлено: 18 Ноябрь 2022, 11:51
Игорь Столяров
Дед Пахом писал(а): 18 Ноябрь 2022, 10:50 BOOL это не отдельный тип
Понял. Печаль !
smile199.gif
smile199.gif (3.34 КБ) 7734 просмотра