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

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

Добавлено: 19 Сентябрь 2024, 14:49
Игорь Столяров
Дед Пахом писал(а): 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
		}]
}

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

Добавлено: 19 Сентябрь 2024, 19:33
Дед Пахом
Вложенный массив групп изначально содержит мусор, надо его сперва очистить

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

CLEAR(gTest.ID)
Правда в v1.42 вы получите пустые объекты и массивы, в v1.43 (только что загрузил) должно работать как положено.

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

Добавлено: 19 Сентябрь 2024, 20:27
Игорь Столяров
Дед Пахом писал(а): 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

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

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