Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - v.melnikov

Страницы: [1]
1
Коллегии может уже кого всплывала такая проблема с парсингом JSON?
Сразу скажу что синтаксис 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"
    }
}
Тут имеются два основных массива "2a52cc7d-c35e-46a0-97e2-22cfbf5749e0" и "38acaaba-bd6b-4216-b49e-78100fb44390", так API обзывает массивы по ID устройства. Из каждого из них нужны параметры из массивов "Final".
понимаю что для каждого извлечения из них должно быть что такое:
Код: (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;
С одиночным разбором мне всё понятно.
Не могу понять как сделать последовательную обработку  каждого корневого массива в одном скрипте, уж очень не хочется слать запросы на каждое устройство отдельно.

Страницы: [1]