cJSON: Сборка вручную и мой первый раз

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

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

cJSON: Сборка вручную и мой первый раз

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

Добрый день !

Проверьте пожалуйста - здесь всё сделано правильно ?
Удаляем ведь только ROOT ? Код оптимальный ?

Задача собрать структуру:

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

{
  "type": "nonFiscal",
  "items": [
    {
      "type": "text",
      "text": "ТЕКСТ\r\nПРОИЗВОЛЬНОЙ\r\nДЛИНЫ",
      "wrap": "chars"
    }
  ],
  "printFooter": false
}   
Мой вариант решения задачи:

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

MyTest  Routine
   Data
Json       cJSONFactory   
Root       &cJson
jObject    &cJson
jArray     &cJson
   
  Code   
  Root &= json::CreateObject()  
  If Not Root &= Null
   
     Root.AddStringToObject('type','nonFiscal')
     Root.AddFalseToObject('printFooter')     
     
     jArray &= json::CreateArray()  
     If Not jArray &= Null

        jObject &= json::CreateObject()  
        If Not jObject &= Null
           jObject.AddStringToObject('type','text')
           jObject.AddStringToObject('wrap','chars')
           jObject.AddItemToObject('text',json::CreateString('ТЕКСТ<13,10>ПРОИЗВОЛЬНОЙ<13,10>ДЛИНЫ'))
           jArray.AddItemToArray(jObject)
        end
      
        Root.AddItemToObject('items',jArray)
     end
  
     Atol::Message(Root.ToString(True))
     SetClipBoard(Root.ToString(True))
     Root.Delete()  
   end   
Результат вроде бы правильный:

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

{
	"type":	"nonFiscal",
	"printFooter":	false,
	"items":	[{
			"type":	"text",
			"wrap":	"chars",
			"text":	"ТЕКСТ\r\nПРОИЗВОЛЬНОЙ\r\nДЛИНЫ"
		}]
}
Спасибо за контроль - я никогда такого не делал ... :shock:
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Сборка вручную и мой первый раз

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

Игорь Столяров писал(а): 24 Сентябрь 2024, 13:49 jObject.AddItemToObject('text',json::CreateString('ТЕКСТ<13,10>ПРОИЗВОЛЬНОЙ<13,10>ДЛИНЫ'))
А почему не как остальные строки через AddStringToObject?
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Сборка вручную и мой первый раз

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

Потому, для больших строк Вы сказали так работать:
Дед Пахом писал(а): 23 Сентябрь 2024, 18:05 Смотреть нужно в сторону нормального кода типа

loop i=1 to records(q)
get(q, i)
jObject.AddItemToObject('string_'& i, json::CreateString(q.PrintText))
end
Здесь можно использовать AddStringToObject() ?
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Сборка вручную и мой первый раз

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

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

cJSON: Сборка вручную и мой первый раз

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

Спасибо. Вариант с AddStringToObject() конечно выглядит проще.
И ещё есть вопрос по добавлению списка элементов в массив.
Я правильно понимаю, что для каждого элемента нужно создавать свой экземпляр (которые очистит Root.Delete()) ?

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

     If Not jArray &= Null
        Loop Count = 1 to N
        
           jObject &= json::CreateObject()  
           If Not jObject &= Null
              jObject.AddStringToObject('type','text')
              jObject.AddStringToObject('wrap','chars')
              jObject.AddStringToObject('text',TextArray[Count])
              jArray.AddItemToArray(jObject)
           end      
        end      
        Root.AddItemToObject('items',jArray)
     end
Последний раз редактировалось Игорь Столяров 24 Сентябрь 2024, 19:20, всего редактировалось 1 раз.
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Сборка вручную и мой первый раз

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

Верно.
С уважением, ДП
Ответить