cJSON: Проблема парсинга полей с одинаковыми именами
Добавлено: 29 Октябрь 2024, 8:25
				
				Добрый день !
Третий день пытаюсь преодолеть проблему, но всё-таки придётся Вас побеспокоить ...
Я постарался создать минимальный демонстрационный тест, что бы не замылить ошибку:
1. Сначала qPacket.Info.flag = False и это неправильно !
2. Но если убрать из списка qPacket второе поле с именем "Flag" (например закомментировав G_OnLine.Info) -
то всё чудесным образом начинает работать правильно, т.е. qPacket.Info.flag меняет значение на TRUE.
 
3. Интересно, что отключить блок с дублирующим именем поля нельзя.
Точнее отключить можно, но проблему это не решает:
Проверьте пожалуйста ! Я уже не знаю, что здесь происходит ... Спасибо !
			Третий день пытаюсь преодолеть проблему, но всё-таки придётся Вас побеспокоить ...
Я постарался создать минимальный демонстрационный тест, что бы не замылить ошибку:
Код: Выделить всё
TestPublic  Routine
  Data  
G_Info    Group,Type
Flag        Bool
          end
        
G_OnLine  Group,Type
Info        Group(G_Info).  ! ЕСЛИ ЗАКМОМЕНТИРОВАТЬ ВОТ ЭТУ СТРОКУ, тогда qPacket.Info.flag = TRUE и это правильно
          end
          
G_Valid   Group,Type
Online      Group(G_OnLine).
          end          
        
qPacket   Queue(G_Valid)
Info        Group(G_Info).
          end
        
jStr      String('[{{"Info":{{"Flag":true},"Online":{{"Info":{{"Flag":true}}}]')        
Json      cJSONFactory
  Code
  Json.ToQueue(jStr,qPacket,,'[{{"name":"Flag","IsBool":true}]')
  Get(qPacket,1)
  Message(qPacket.Info.flag)  ! = FALSE и это неправильно !!! :(
 !Message(qPacket.Online.Info.flag)  ! = TRUE и это правильно
2. Но если убрать из списка qPacket второе поле с именем "Flag" (например закомментировав G_OnLine.Info) -
то всё чудесным образом начинает работать правильно, т.е. qPacket.Info.flag меняет значение на TRUE.
3. Интересно, что отключить блок с дублирующим именем поля нельзя.
Точнее отключить можно, но проблему это не решает:
Код: Выделить всё
qPacket   Queue
Online      Group
Info          Group   !
Flag            Bool  !
              end     !
            end
Info        Group
Flag          Bool
            end
          end
jStr      String('[{{"Info":{{"Flag":true},"Online":{{"Info":{{"Flag":true}}}]')        
Json      cJSONFactory
  Code          
  ! Не решает проблему :(
  Json.ToQueue(jStr,qPacket,,'[{{"name":"Flag","IsBool":true},{{"name":"Online","ignore":true}]')
  Get(qPacket,1)
  Message(qPacket.Info.flag)  ! = FALSE и это неправильно !!! :(