Стартовая страница › Форумы › Разработка и интеграция › Опрос по HTTP и разбор JSON
- В этой теме 18 ответов, 3 участника, последнее обновление 2 года, 5 месяцев назад сделано Mikhail.
-
АвторСообщения
-
15.09.2021 в 10:33 #20775manjey73Участник
В общем нужно написать драйвер для датчиков, которые опрашиваются по http и возвращают обратно ответ в JSON формате.
Пните на путь истинный что использовать? Так понимаю пример KpHTTP и использование какой-то библиотеки для непосредственно разбора JSON ?
15.09.2021 в 12:51 #20776RomirosУчастникТипа того. JSON можно стандартными средствами c# разобрать, не вижу смысла что-то ещё использовать.
15.09.2021 в 13:09 #20777manjey73Участник@romiros парсить строки ответа? просто может есть готовое решение, какая-то dll, которая разложит все по полочкам?
Типа имя — значение. Или это прямо в C# заложено и можно использовать?15.09.2021 в 13:13 #20778manjey73УчастникJsonDocument.Parse Метод ???
Но при этом везде пишется, что «представляющего отдельное байтовое значение JSON»
байтовое или символьное или просто значение, но отдельное..{ "id": "ХХХХХХ", "temperature": "24.51", "humidity": "41.42", "light_lvl": "69", "co2": "5000", "voc": "1.168", "magnetic_radiation": "97.057", "noise_lvl": "41",
И так далее, переменных может быть много, смотрю все строковое…
15.09.2021 в 13:34 #20779RomirosУчастникИли это прямо в C# заложено и можно использовать?
Можно использовать. Поищите примеры. Возможно в открытых кодах RapidScada даже есть, не помню уже. Вы создаете класс в c#, а потом сериализуете его в JSON, ну или в Вашем случае в обратную сторону. Можете взять библиотеку от NewtonSoft, но я от неё ушел, потому что в Linux она как-то криво работала.
15.09.2021 в 13:45 #20780manjey73УчастникАга, на счет NewtonSoft учту, как раз надо, чтобы работало в Linux.
Проблема десериализации заключается в том, что набор переменных может быть разным, как и количество в наборе.
15.09.2021 в 13:55 #20781RomirosУчастникПроблема десериализации заключается в том, что набор переменных может быть разным, как и количество в наборе.
Так сложно сказать. Нужно видеть конкретную задачу. Что значит разным? Вы выше привели пример JSON, он может меняться в зависимости от прибора? Например, если количество параметров неизвестно, можно получить JSON при настройки драйвера, пройтись по нему каким-нибудь foreach и создать карту сигналов КП. Без конкретики сложно что-то подсказать, может вообще нужен другой подход.
15.09.2021 в 15:00 #20782manjey73УчастникДа, совершенно верно, количество зависит от установленных в датчик сенсоров по описанию. Так же может быть еще метка времени, если в датчике стоят часы реального времени.
Вот и пытаюсь понять как делать реализацию. При этом все это скорее всего надо будет запихивать в один драйвер и делать за счет шаблонов, то есть чтение по IP, получение некоторого списка, создание шаблона, просьба перегрузить линию и подтягивание шаблона.
А что, если при десериализации не будет параметра? он же должен принять значение по умолчанию как это с xml происходит? Просто с json еще не пробовал работать.
15.09.2021 в 16:10 #20783MikhailМодераторОтправка и приём HTTP запросов есть в драйвере KpHttpNotif. Здесь
Если формат ответа JSON заранее известен и фиксирован, то его удобнее разбирать средствами .NET: JavaScriptSerializer.Deserialize
Если нужен гибко настраиваемый драйвер, то интересный подход по разбору JSON реализован в драйвере Mqtt. Там используется библиотека, которая выполняет JavaScript на лету и может результат разбора записать в переменные C#. Ссылка
- Этот ответ был изменен 2 года, 6 месяцев назад от Mikhail.
15.09.2021 в 17:09 #20785manjey73Участникок, попробую поковырять…
Такой вопрос, а методы и т.д. доступны в указанных библиотеках, например чтобы не писать то же самое из KpHttpNotif например, а просто использовать библиотеку?
- Этот ответ был изменен 2 года, 6 месяцев назад от manjey73.
17.09.2021 в 14:37 #20787MikhailМодераторне писать то же самое из KpHttpNotif например, а просто использовать библиотеку?
На мой взгляд, нет смысла ссылаться на KpHttpNotif в своём драйвере, т.к. там многовато лишнего. Хотя технически это возможно.
18.10.2021 в 14:51 #21077manjey73УчастникНе хочет собираться KpHttpNotif
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка не удалось скопировать файл «E:\Work_Work\Programm\scada\ScadaComm\OpenKPs\AddressBook\Lang\AddressBook.en-GB.xml» — файл не найден. KpHttpNotifХотя файл там есть, и он копируется в папку Debug самого KpHttpNotif
хм, папка то scada-master
19.10.2021 в 16:01 #21088MikhailМодераторЯ поправлю ссылку на файл.
А пока можно просто удалить ссылку на файл AddressBook.en-GB.xml из проекта KpHttpNotif. Он там не критичен.19.10.2021 в 16:19 #21093manjey73УчастникЯ папку scada-master просто переименовал в папку scada и собрал.
Видимо там путь не весь относительный.20.10.2021 в 15:21 #21111MikhailМодераторДа, этот драйвер переносился из другого репозитория и путь к файлу оказался не совсем корректным.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.