Страница 1 из 2
v1.46
Добавлено: 28 Сентябрь 2024, 0:09
Дед Пахом
Положил обновление v1.46 на наш публичный фтп в папку /cjson/1.46.0. Пока изменения такие:
- NEW: json::CreateArray(*GROUP[],...) overloaded functions create json array from passed array of groups.
- NEW: ToGroupArray(*GROUP[],...) overloaded methods save json array to a GROUP array.
- NEW: Options now can be passed as a cJSON object as well.
- FIX: Performance issue with the options.
Меня интересует главным образом не новый функционал (работает/нет или не так), а не отвалилось ли что-нибудь в старом? Изменения были не косметические, так что могло. Я проверил на самых простых примерах, но хорошо бы на реальных.
v1.46
Добавлено: 01 Октябрь 2024, 16:48
Дед Пахом
Какое замечательное у нас сообщество.
v1.46
Добавлено: 01 Октябрь 2024, 17:47
Игорь Столяров
Я тестирую релиз 1.46 с момента его выхода на всех своих (и не только) реальных проектах.
Если были бы вопросы - обязательно сообщил !

v1.46
Добавлено: 01 Октябрь 2024, 18:03
finsoftrz
Из множества тем, открытых по cjson, я понял, что поросенок и кролик вместе это страшная сила.

v1.46
Добавлено: 01 Октябрь 2024, 18:53
Игорь Столяров
finsoftrz писал(а): 01 Октябрь 2024, 18:03
поросенок и кролик
Места медвежонка, ослика и тигры - вакантны !

v1.46
Добавлено: 02 Октябрь 2024, 16:53
Дед Пахом
Дед Пахом писал(а): 28 Сентябрь 2024, 0:09
- FIX: Performance issue with the options.
.ToQueue с опциями стало шустрее в 4.5 раза на огромном (190 mb) json - время выполнения уменьшилось с 90 до 20-ти секунд. 206560 записей.
v1.46
Добавлено: 02 Октябрь 2024, 22:32
Игорь Столяров
Действительно, такой вопрос был года 2-3 назад ...
Мы тогда (с Вашей помощью) понавтыкали индикаторов загрузки через rh.ArrayCB() и как-то приняли реальность.

v1.46
Добавлено: 04 Октябрь 2024, 19:42
Игорь Столяров
v1.46 (04.10.2024)
NEW: (Experimental) Field names in options now can be specified as an array. For example this option: {"name":["password","salary"], "ignore":true} says that the fields "password" and "salary" should be ignored if "ignore" rule was not explicitly defined in named options.
По практике применения опций:
- 70% опций закрывают косяки Clarion, т.е. это JsonName / IsBool / Instance. И здесь ничего сделать низя. Проехали.
- но 15% опций - это применение Ignore к GROUP, потому что не обрабатывается содержание закрываемой GROUP.
И приходится перечислять весь состав GROUP ... иначе просто вообще разрушается структура данных.
В этом есть какой-то непонятный мне смысл ? И так как нет возможности указывать указывать место тега в структуре,
то происходит закрытие тега по имени во всех местах ... что уже совсем неправильно.
Данная опция, конечно, упрощает закрытие GROUP ... но может быть есть смысл решить вопрос полностью ?
Т.е. {"name":"GroupName", "ignore":true} закрывает GroupName со всем её содержимым. Спасибо !

v1.46
Добавлено: 04 Октябрь 2024, 20:41
Дед Пахом
Нихрена не понял.
v1.46
Добавлено: 04 Октябрь 2024, 21:11
Игорь Столяров
Спасибо за хороший вопрос !

Я поясню на примере ...
Есть структура данных, в которой мне не нужны все вложенные GROUP
Код: Выделить всё
Data
Group1 Group
Field1 Long
Group2 Group
Field2 Bool
Group3 Group
Field3 Real
Field4 Short
end
end
end
Root &cJson
Code
Root &= json::CreateObject(Group1,,'[{{"Name":"Group2","Ignore":true}]')
If Not Root &= Null
Message(Root.ToString(True))
SetClipBoard(Root.ToString(True))
Root.Delete()
end
Здесь проблема даже не в том, что выгружены поля, которые не нужны.
А в том, что структура разрушена: field2 и весь group3 "переехали" на уровень вверх.
Код: Выделить всё
{
"field1": 0,
"field2": 0,
"group3": {
"field3": 0,
"field4": 0
}
}
Я знаю решение и им пользуюсь: перечислять ВСЕ поля во вложенных структурах и
добавлять для них опцию IGNORE ... но это большой и трудно сопровождаемый объём бесполезной работы.
Зачем вообще сделана такая фишка (если это не ошибка) ? Группа должна удаляться со всем её содержимым.
Причём как в выгрузке, так и в загрузке (зачем мусор в содержимом, если я явно указал что мне не нужна ВСЯ группа)
v1.46
Добавлено: 04 Октябрь 2024, 21:34
Дед Пахом
Я знаю ещё парочку решений: дать ненужным полям атрибут NAME('Unused_field') и добавить опцию {"name":"Unused_field","ignore":true}.
Или просто не включать ненужные поля в структуру. Все наверное так и поступают, так как никто до сих пор не жаловался.
Но если так (не проверял ещё), то это ошибка, конечно, игнорирование группы должно распространяться на всю группу.
Если возникнут ещё вопросы, открывайте новую тему, эту считаю закрытой.
v1.46
Добавлено: 04 Октябрь 2024, 21:41
Игорь Столяров
Дед Пахом писал(а): 04 Октябрь 2024, 21:34
Я знаю ещё парочку решений
Нетъ. Структура определяет общий пакет обмена и её состав зависит динамически от запроса.
Даже дело не в этом ... Здесь просто логическое противоречие.
Например есть дорожный знак: АВТОМОБИЛЯМ ВЪЕЗД ЗАПРЕЩЁН.
Никто ведь не пишет под ним:
- Колёсам въезд запрещён;
- Сиденьям въезд запрещён;
- Магнитоле въезд запрещён;
- и т.д.
А мне сейчас приходится для исключение некой составной структуры делать именно так !

v1.46
Добавлено: 04 Октябрь 2024, 21:46
Дед Пахом
Да это понятно. Хорошо хоть, что так быстро ошибка обнаружилась, 6 лет всего (v1.02 (26.09.2018)).
v1.46
Добавлено: 04 Октябрь 2024, 21:56
Игорь Столяров
Дед Пахом писал(а): 04 Октябрь 2024, 21:46
Хорошо хоть, что так быстро ошибка обнаружилась, 6 лет всего
Я этот вопрос задавал где-то вот здесь ...
viewtopic.php?t=4941&hilit=Ignore&start=165
Но было сказано - для исключения перечислять все поля поля в структуре, что я молча и делал.
Сегодня просто увидел новую фишку с массивом имён в опциях и сразу подумал, что здесь её можно применить.

v1.46
Добавлено: 04 Октябрь 2024, 22:00
Дед Пахом
Игорь Столяров писал(а): 04 Октябрь 2024, 21:56
Я этот вопрос задавал где-то вот здесь ...
viewtopic.php?t=4941&hilit=Ignore&start=165
Пару страниц пролистнул, не нашёл, все 18 читать не буду. И здесь завязываем.