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

cJSON: Расхождение результатов ToGroup

Добавлено: 23 Сентябрь 2024, 21:45
Игорь Столяров
Добрый день !

Сразу хочу сказать, что этот вопрос возник не после сегодняшнего обновления (за которое огромное спасибо !).
Я давно это место обходил, но раз уже сегодня пошла переделка старого кода и костылей - решил сделать тест и показать ... ;)

Два эквивалентных способа загрузить простую группу и список в ней - дают разный результат:

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

  Data
Root       &cJson
Object     &cJson
Json       cJSONFactory
JStr       String('{{"menu":{{"T10":"lunch","T11":[{{"T12":"Пицца"},{{"T12":"Цезарь"}]}}')

gResponse  Group
T10          CString(21)
T11          &Q_List
           end           
Q_List     Queue,Type
T12         CString(21)
           end            
qList      Queue(Q_List).

  Code  
  ! --- 1 ВАРИАНТ (КЛАССИКА) ---
  Root &= Json.Parse(JStr)
  If Not Root &= Null     
     Object &= Root.FindObjectItem('menu')
     If Not Object &= Null           
        Object.ToGroup(gResponse,,'[{{"name":"T11","instance":' & Instance(qList,Thread()) & '}]')
        Message(gResponse.T10 & ' : ' & Records(qList))  ! lunch : 2 / OK ! :)
     end
     Root.Delete()
  end
  
  ! --- 2 ВАРИАНТ (УДОБНЫЙ) ---
  Clear(gResponse)
  Free(qList)
  
  Json.ToGroup(JStr,'menu',gResponse,'[{{"name":"T11","instance":' & Instance(qList,Thread()) & '}]')
  Message(gResponse.T10 & ' : ' & Records(qList))  ! lunch : 0 / BAD ! :(
Может быть я чего-то не понимаю ? Буду благодарен ! :)

cJSON: Расхождение результатов ToGroup

Добавлено: 23 Сентябрь 2024, 22:26
Дед Пахом
Во втором случае я вижу, что параметр pMatchByFieldNumber пропущен, надо так:

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

Json.ToGroup(JStr,'menu',gResponse,,'[{{"name":"T11","instance":' & Instance(qList,Thread()) & '}]')

cJSON: Расхождение результатов ToGroup

Добавлено: 23 Сентябрь 2024, 22:45
Игорь Столяров
Спасибо ! Точно. Теперь всё работает. :)
Запутался, когда методы с одинаковыми именами имеют совсем разные наборы параметров.
Overloading - это ведь больше про разделение по типу передаваемых данных ...