cJSON: Формат полей для вложенных структур
Модератор: Дед Пахом
					Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Основной тред
	При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Основной тред
- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
cJSON: Формат полей для вложенных структур
Вот такой вариант, удовлетворяет моим хотелкам. Тестировал, правда, на совсем примитивных вводных.
			
							- Вложения
 - 
			
		
		
				
- cjson.clw
 - (79.51 КБ) 140 скачиваний
 
 
С уважением, ДП
			
						- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
cJSON: Формат полей для вложенных структур
Спасибо. Достаточно сложный вариант сложения правил, чего ранее в классе ведь не было ... 
Для моих простых хотелок, вроде "все выключили и потом включили два" конечно подходит.
 
Но смущает вот такая комбинация. Должно ли выгружаться Field02 ?
Ведь для него (как и всех других полей) должно действовать общее правило: Ignore = true ...
			
			
									
						Для моих простых хотелок, вроде "все выключили и потом включили два" конечно подходит.
Но смущает вот такая комбинация. Должно ли выгружаться Field02 ?
Ведь для него (как и всех других полей) должно действовать общее правило: Ignore = true ...
Код: Выделить всё
jParams &= json::CreateObject(MyDoc,,'{{"name":"Name","ignore":False},{{"name":"*","ignore":true},{{"name":"Field02","IsQueue":True}')
  ! Выгружает только поля: Name и Field02
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- Admin
 - Администратор
 - Сообщения: 4022
 - Зарегистрирован: 05 Июль 2005, 15:59
 - Откуда: Хабаровск
 - Благодарил (а): 59 раз
 - Поблагодарили: 42 раза
 - Контактная информация:
 
cJSON: Формат полей для вложенных структур
Мужики. Зачем огород городить. 
Нужно управление каждым полем. А если юзеру нужно он сверху может накрутить что угодно. Наследование или еще как.
Налепите, потом не разберешься
			
			
									
						Нужно управление каждым полем. А если юзеру нужно он сверху может накрутить что угодно. Наследование или еще как.
Налепите, потом не разберешься
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
			
						- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
cJSON: Формат полей для вложенных структур
Я согласный упроститься ещё со вчера ... 
Как по мне - то комбинация с явными параметрами самая понятная и простая. Но я здесь лузером ...
Либо общее правило, либо задаём ВСЁ индивидуально. Котлеты отдельно, мухи отдельно.
Все поля булевы, а для Expired ещё меняем имя:
			
			
									
						Как по мне - то комбинация с явными параметрами самая понятная и простая. Но я здесь лузером ...
Либо общее правило, либо задаём ВСЁ индивидуально. Котлеты отдельно, мухи отдельно.
Все поля булевы, а для Expired ещё меняем имя:
Код: Выделить всё
[{"name"="Expired","jsonname":"IsExpired","isbool":true},{"name"="*","isbool":true}]
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
cJSON: Формат полей для вложенных структур
Ладно, будем считать, что общее правило должно применяться только для полей, для которых нет явного правила.
			
			
									
						С уважением, ДП
			
						- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
cJSON: Формат полей для вложенных структур
Я за. В принципе можно считать этот вариант базовой комплектацией.
А дальше (при желании) уже можно сделать опциональные правила сложения правил ...
			
			
									
						А дальше (при желании) уже можно сделать опциональные правила сложения правил ...
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
cJSON: Формат полей для вложенных структур
На примерах всё работает, в боевых задачах буду следить.  
 
Главное, что это решение не ломает существующие схемы выгрузки.
А мне теперь надо катастрофически упростить огромные правила выгрузки.
			
			
									
						Главное, что это решение не ломает существующие схемы выгрузки.
А мне теперь надо катастрофически упростить огромные правила выгрузки.
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
cJSON: Формат полей для вложенных структур
Добрый день !
Да, это снова я за воспоможением по той же теме ...
Берём прекрасный штатный пример: QueueInGroupTest и помещаем списк телефонов во вложенный блок JSON:
Список телефонов перестал загружаться сразу.
А ведь по сути ничего не поменялось для настроек загрузки через INSTANCE(PhonesQ, THREAD()) ... но не работает.
Метод просто не просматривает вложенные блоки ?
 
Как загрузить такой массив через FindObjectItem('phones') + ToQueue(PhonesQ) - я знаю.
Но непонятно почему "выключается" загрузка через буфер ? Я чего-то опять не понимаю ?
Заранее спасибо.
			
			
									
						Да, это снова я за воспоможением по той же теме ...
Берём прекрасный штатный пример: QueueInGroupTest и помещаем списк телефонов во вложенный блок JSON:
Код: Выделить всё
!Было:
!testString  STRING('{{"name": "Carl", "addresses": [{{"city": "Rivercity","street": "Main st","house": 123},{{"city": "Rivertown","street": "Park st","house": 987}], "phones": ["1234567", "7654321"]}')
!Стало
testString  STRING('{{"name": "Carl", "addresses": [{{"city": "Rivercity","street": "Main st","house": 123},{{"city": "Rivertown","street": "Park st","house": 987}], "phonelist":{{"phones": ["1234567", "7654321"]}}')
!Для наглядности:
{
  "name": "Carl",
  "addresses": [
    {
      "city": "Rivercity",
      "street": "Main st",
      "house": 123
    },
    {
      "city": "Rivertown",
      "street": "Park st",
      "house": 987
    }
  ],
  "phonelist": {
    "phones": [
      "1234567",
      "7654321"
    ]
  }
}
А ведь по сути ничего не поменялось для настроек загрузки через INSTANCE(PhonesQ, THREAD()) ... но не работает.
Метод просто не просматривает вложенные блоки ?
Как загрузить такой массив через FindObjectItem('phones') + ToQueue(PhonesQ) - я знаю.
Но непонятно почему "выключается" загрузка через буфер ? Я чего-то опять не понимаю ?
Заранее спасибо.
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
cJSON: Формат полей для вложенных структур
Потому что несовпадение по структуре, вот почему 
Если Phones поместить в группу PhoneList, то всё начинает работать:
			
			
									
						Если Phones поместить в группу PhoneList, то всё начинает работать:
Код: Выделить всё
PersonGrp                       GROUP
Name                              STRING(20)
Addresses                         &QUEUE      !- reference to AddressQ
Phonelist                         GROUP
Phones                              &QUEUE      !- reference to PhonesQ
                                  END
                                END
С уважением, ДП
			
						- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
cJSON: Формат полей для вложенных структур
Спасибо, я понял идею. Всё действительно работает.
Получается, массив может быть в любом месте строки JSON, а вот уникальный указатель на очередь - нужно выставлять чётко по структуре.
Это нужно знать.
			
			
									
						Получается, массив может быть в любом месте строки JSON, а вот уникальный указатель на очередь - нужно выставлять чётко по структуре.
Это нужно знать.
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
cJSON: Формат полей для вложенных структур
Когда парсинг доходит до элемента "phonelist" и не находит соответствующего поля в группе, то просто переходит к следующему элементу.
			
			
									
						С уважением, ДП
			
						- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
cJSON: Формат полей для вложенных структур
Привет всем !
У меня снова непонятки.
 Прошу рассмотреть пример: 
Результат: 
Заранее спасибо за содействие ! 
			
			
									
						У меня снова непонятки.
Код: Выделить всё
MyTest     Procedure()
Q_Docs         Queue,Type
SignedContent    Group
Content            String(20)
Signature          String(20)
TestFlag           Bool
                 end
               end
gMessage       Group
Docs             &Q_Docs
DocsInstance     Long
               end
qFile          Queue(Q_Docs).
Params         &cJson
  Code
  qFile.SignedContent.Content = 'Текст'; Add(qFile)
  gMessage.Docs         &= qFile
  gMessage.DocsInstance  = Instance(gMessage.Docs,Thread())
  Params &= json::CreateObject(gMessage,,'[{{"name":"*",            "ignore":true},'  & |
                                          '{{"name":"Docs",         "isQueue":true},' & |
                                          '{{"name":"DocsInstance", "ignore":false},' & |  ! Это мона убрать
                                          '{{"name":"SignedContent","ignore":false},' & |
                                          '{{"name":"Content",      "ignore":false},' & |
                                          '{{"name":"TestFlag",     "isBool":true}]')
  Message(Params.ToString(True))
Код: Выделить всё
{
  "docs": [
    {
      "signedcontent": {
        "content": "Текст",
        "testflag": false
      },
      "testflag": false   ! <--- ??? Откуда взялся этот дубликат ???
    }
  ]
}
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
cJSON: Формат полей для вложенных структур
Можно проще, но c тем же конфузом.
Что-то пошло не так с полем "Signature" ...
			
			
									
						Что-то пошло не так с полем "Signature" ...
Код: Выделить всё
  Params &= json::CreateObject(gMessage,,'[{{"name":"Docs","isQueue":true},{{"name":"Signature","ignore":true}]')
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
cJSON: Формат полей для вложенных структур
Мой косяк, прикрепил фикс, проверьте.
			
							- Вложения
 - 
			
		
		
				
- cjson.clw
 - (76.46 КБ) 150 скачиваний
 
 
С уважением, ДП
			
						