Плагин HTTP-Client
-
Добрый день! пытаюсь получить данные temp из json
{"observations":[{"stationID":"ISCHEP1","obsTimeUtc":"2019-11-22T14:25:55Z","obsTimeLocal":"2019-11-22 17:25:55","neighborhood":"Schepkinskoe","softwareType":null,"country":"RU","solarRadiation":null,"lon":39.80593491,"realtimeFrequency":null,"epoch":1574432755,"lat":47.34576416,"uv":null,"winddir":102,"humidity":52.0,"qcStatus":-1,"metric":{"temp":-4.9,"heatIndex":-4.9,"dewpt":-13.1,"windChill":-8.3,"windSpeed":7.4,"windGust":9.3,"pressure":1033.86,"precipRate":0.00,"precipTotal":0.25,"elev":24.4}}]}
но что то не пойму что надо записать в Извлечение данных JSON
data.observations.metric.temp ошибка
-
observations - это массив
Попробуйте так: data.observations[0].metric.temp
-
спасибо попробую
-
опрашиваемое устройство присылает ответ в JSON в виде 6 разрядного числа, каждый из разрядов которого может принимать значение 0 или 1. Как грамотно написать запрос для извлечения данных, что бы не отбрасывались первые незначащие нули?
Т.е , например, плагин читает ответ вида 010000 но в сценарий передает 10000. Куда смотреть?
UPD: Как вариант можно "выровнять" в самом сценарии,
типа:while (val.length <6 ) vl='0' + val; // добиваем 0-ми до 6 символов
но это все равно полностью не снимает вопрос...
-
@alesle Добрый день, для начала попробуйте отключить галочку
преобразовать в число
, если не поможет тогда:String(val).padStart(6, '0') // 010000
-
ни то не другое не помогает - из плагина все равно передается число без лидирующих нулей. Впрочем, это легко исправляется в скрипте.
-
@alesle Добрый день, для устройства сделайте тип
сенсор аналоговый универсальный
-
@dev
так и есть , но - не работает...
-
Участник @intrahouse написал в Плагин HTTP-Client:
Опубликована статья "Парсинг сайта погоды" https://ih-systems.com/ru/weather-parsing/
,,,,dev 13 мар. 2019 г., 18:52
Добрый день в Блоге опубликована статья "Как получить информацию о подключенных клиентов с WI-FI роутера" https://ih-systems.com/ru/parsing-podkljuchennyh-klientov-s-wi-fi-routera/
Можно проверить корректность ссылок?
"Не найдено....."
-
Господа, имеется ответ от девайса в виде массива JSOn вида:
"onew_temp": [ { "id": "1", "adr_hex": "28BC6B2D09000066", "name": "S6", "t": "25.31" }, { "id": "2", "adr_hex": "28AADE403D1401D6", "name": "S2", "t": "25.06" },
Как правильно написать выражение для извлечения данных, что бы оно извлекало t там, где name="S6" ?
Понятно что,
data.onew_temp[0].t
извлечет то что нужно, но дело в том что нет уверенности что эти данные всгда будут на этом месте. А вот "name": "S6" будет всегда.
-
Участник @alesle написал в Плагин HTTP-Client:
но дело в том что нет уверенности что эти данные всгда будут на этом месте. > А вот "name": "S6" будет всегда.
Если "name": "S6" будет всегда, то можно так:
data.onew_temp.filter(item => item.name=="S6")[0].t
-
Блин, работает!!!
Я правда нифига не вкурил как , но - работает!!!
Буду разбираться..
Спасибо огромное!
-
@alesle пожалуйста
Вот вариант еще корочеdata.onew_temp.find(item => item.name=="S6").t
Современный javascript мощный и гибкий язык, особенно если использовать синтаксис ES6 (или ES2015, что одно и то же) , в данном случае стрелочные функции.
Магия этих выражений раскрывается в 2 шага-
Массивы в JS имеют встроенные методы для поиска по заданному критерию, в частности filter, find
- find - ищет первый элемент массива, возвращает найденный объект
- filter - сюрприз - фильтрует входной массив и возвращает все найденные элементы (learn.javascript.ru/array-methods)
-
Методу нужно передать критерий отбора - функцию для обработки элемента массива.
Если писать, используя синтаксис классических функций, то получится так:
arr.filter( function (item) { return item.name == 'S6'; });
Функция вызывается по очереди для каждого элемента массива (item), если возвращает true, то элемент берется в новый массив
С введением в ES6 стрелочных функций все стало компактнее:
function (item) {return item.name == 'S6';}
можно заменить на
(item) => item.name == 'S6'
Что произошло
- убрали function
- грубо говоря return заменили на =>
- если входной аргумент ровно один - то и скобки можно не ставить
Подробнее https://learn.javascript.ru/arrow-functions
Получаем:arr.filter( item => item.name == 'S6' );
Ну и надо иметь в виду, что возвращает метод массива.
Если результат - массив, то берем свойство его первого элементаdata.onew_temp.filter(item => item.name=="S6")[0].t
Если результат - объект, то просто берем свойство t
data.onew_temp.find(item => item.name=="S6").t
-
-
Спасибо за доходчивое объяснение!
-
Здравствуйте.
А как действовать, если веб страница скриптами заполняется?
Выглядит так
а внутри
Текст ссылкиКак вытащить, например, напряжение на входе?
-
@Erik а SNMP у него нет?
-
В него нужно какую то плату вставить, а я их в продаже не нашел.
Без платы нет.
Подключается по USB к компьютеру, и через веб-сервер на этом компьютере можно смотреть и настраивать хоть локально, хоть с другого ПК.
-
@Erik Добрый день, обычно в таком случае в отладчике хрома, в разделе
network
можно найти запросы типаJSON
-
@dev
там только xhr
-
@Erik Добрый день,
reqMonitorData
похоже он и есть, можно выбрать любой запрос и посмотреть вкладкуresponse