cJSON: Проблема с исключением пустых массивов v1.42

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Основной тред
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Проблема с исключением пустых массивов v1.42

Сообщение Игорь Столяров »

Дед Пахом писал(а): 14 Сентябрь 2024, 18:17 Версия v1.42 доступна для тестирования.
Добрый день !

Есть проблемы с новой версией cJSON v1.42.
Только если раньше значения не исключались, то теперь пошёл какой-то мусор (указатели ?). :(
Проверьте пожалуйста на простом примере:

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

MyTest  Routine

  Data
Root   &cJson  
gTest  Group
Name     CString(41)
Foto     CString(41)
ID       Group,Dim(3)
Adress     CString(41)
Phone      Long
         end
       end 
        
  Code
  gTest.Name = 'Алексей'  
!  gTest.ID[1].Adress = 'Ростов'
!  gTest.ID[1].Phone  = 12345
!  gTest.ID[2].Adress = 'Таганрог'
!  gTest.ID[2].Phone  = 67890
!  gTest.ID[3].Adress = 'Москва'
!  gTest.ID[3].Phone  = 77777
  
  Root &= json::CreateObject(gTest,,'[{{"Name":"*","EmptyString":"ignore","IgnoreZero":true,' & |
                                       '"IgnoreEmptyObject":true,"IgnoreEmptyArray":true}]')
  If Not Root &= Null
     Message(Root.ToString(True))
     SetClipBoard(Root.ToString(True))
     Root.Delete()
  end
У меня вот такой результат:

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

{
	"name":	"Алексей",
	"id":	[{
		},  {
			"adress":	"                                                                                                 £",
			"phone":	538976288
		},  {
			"adress":	"                                                    £",
			"phone":	538976288
		}]
}
Если убрать комментарии (т.е. заполнить структуру данными), то всё работает штатно и прекрасно:

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

{
	"name":	"Алексей",
	"id":	[{
			"adress":	"Ростов",
			"phone":	12345
		},  {
			"adress":	"Таганрог",
			"phone":	67890
		},  {
			"adress":	"Москва",
			"phone":	77777
		}]
}
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Проблема с исключением пустых массивов v1.42

Сообщение Дед Пахом »

Вложенный массив групп изначально содержит мусор, надо его сперва очистить

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

CLEAR(gTest.ID)
Правда в v1.42 вы получите пустые объекты и массивы, в v1.43 (только что загрузил) должно работать как положено.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Проблема с исключением пустых массивов v1.42

Сообщение Игорь Столяров »

Дед Пахом писал(а): 19 Сентябрь 2024, 19:33 должно работать как положено
Спасибо ! На моих данных теперь всё работает корректно. :)

Дед Пахом писал(а): 19 Сентябрь 2024, 19:33 Вложенный массив групп изначально содержит мусор
Упс ! Век живи - век учись. Специально посмотрел ещё раз справку - там ничего подобного нет.
Пошёл переделывать. У меня много конструкций с предустановкой, вроде:

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

gRequest    Group
type           CString('beginMarkingCodeValidation')
params         Group(Atol:G_ImcParams),Dim(10)
notSendToServer	 Bool(True)
notFormRequest	 Bool(False)
               end
             end
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Проблема с исключением пустых массивов v1.42

Сообщение Дед Пахом »

Вроде бы мусор только там, где нет предустановленного значения. Хотя я не тестировал жёстко.
С уважением, ДП
Ответить