1
Ваши вопросы / Re: Вопросы по скриптам в Simple-Scada 2
« : 02 Марта 2023, 11:45:42 »
Коллегии может уже кого всплывала такая проблема с парсингом JSON?
Сразу скажу что синтаксис Paskal мною подзабыт, вполне возможно что решение банальное и очевидное.
прилетает к примеру такой ответ(специально зарезал до двух массиивов):
Тут имеются два основных массива "2a52cc7d-c35e-46a0-97e2-22cfbf5749e0" и "38acaaba-bd6b-4216-b49e-78100fb44390", так API обзывает массивы по ID устройства. Из каждого из них нужны параметры из массивов "Final".
понимаю что для каждого извлечения из них должно быть что такое:
а дальше просто уже разбор данных по принципу:
С одиночным разбором мне всё понятно.
Не могу понять как сделать последовательную обработку каждого корневого массива в одном скрипте, уж очень не хочется слать запросы на каждое устройство отдельно.
Сразу скажу что синтаксис Paskal мною подзабыт, вполне возможно что решение банальное и очевидное.
прилетает к примеру такой ответ(специально зарезал до двух массиивов):
Код
{
"2a52cc7d-c35e-46a0-97e2-22cfbf5749e0": {
"_LastCoords": null,
"_LastData": "2023-02-28T10:25:01Z",
"ID": "2a52cc7d-c35e-46a0-97e2-22cfbf5749e0",
"Name": "ОМ1",
"LastPosition": {
"Lat": 0.0,
"Lng": 0.0
},
"DT": "2023-02-28T10:25:01Z",
"State": 0,
"Speed": -1.0,
"Course": -1.0,
"Address": "–",
"Final": {
"CosF1_ME1": 0.99,
"Freq1_ME1": 49.99,
"I1_L1_ME1": 12.656,
"I1_L2_ME1": 28.432000000000002,
"I1_L3_ME1": 18.032,
"Inst_ActivePower1_ME1": 15.518399999942631,
"Inst_ReactivePower1_ME1": 0.0,
"U1_L1_ME1": 237.94,
"U1_L2_ME1": 233.03,
"U1_L3_ME1": 233.76
},
"LastCoords": null,
"LastData": "2023-02-28T10:25:01"
},
"38acaaba-bd6b-4216-b49e-78100fb44390": {
"_LastCoords": null,
"_LastData": "2023-02-28T10:25:01Z",
"ID": "38acaaba-bd6b-4216-b49e-78100fb44390",
"Name": "ОМ2",
"LastPosition": {
"Lat": 0.0,
"Lng": 0.0
},
"DT": "2023-02-28T10:25:01Z",
"State": 0,
"Speed": -1.0,
"Course": -1.0,
"Address": "–",
"Final": {
"CosF1_ME1": 0.99,
"Freq1_ME1": 49.99,
"I1_L1_ME1": 12.656,
"I1_L2_ME1": 28.432000000000002,
"I1_L3_ME1": 18.032,
"Inst_ActivePower1_ME1": 15.518399999942631,
"Inst_ReactivePower1_ME1": 0.0,
"U1_L1_ME1": 237.94,
"U1_L2_ME1": 233.03,
"U1_L3_ME1": 233.76
},
"LastCoords": null,
"LastData": "2023-02-28T10:25:01"
}
}понимаю что для каждого извлечения из них должно быть что такое:
Код: (delphi)
aValues1 := Response['2a52cc7d-c35e-46a0-97e2-22cfbf5749e0']['Final'];
aValues2 := Response['2a52cc7d-c35e-46a0-97e2-22cfbf5749e0']['Final'];
Код: (delphi)
U_L1_ME1.Value := aValues1['U1_L1_ME1'].AsFloat;
U_L2_ME1.Value := aValues1['U1_L2_ME1'].AsFloat;
U_L3_ME1.Value := aValues1['U1_L3_ME1'].AsFloat;
Не могу понять как сделать последовательную обработку каждого корневого массива в одном скрипте, уж очень не хочется слать запросы на каждое устройство отдельно.