Как обработать результат web-запроса

Автор Борис_С, 6 августа 2024, 18:36

0 Пользователи и 1 гость просматривают эту тему.

Борис_С

Добрый день.

Мне нужно обработать результат web-запроса.
Сам запрос работает нормально. Вот код:
    Dim http As Object
    Dim strJsonArray
    http = CreateObject("Msxml2.ServerXMLHTTP")
    http.open "GET", url, False
    http.send
    strJsonArray = http.responseText
В переменной strJsonArray получаю результат запроса в виде строки массива JSON.
Как сделать парсинг этой строки?

economist

Искать готовую либу, смотреть "батарейки" Tool, ScriptForge, подумать о Python. Если получен массив - зачем парсить? Или все-таки текст?

Кстати, метода .responseJson нет?
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Борис_С

Это текст. Метода responseJson нет.
Есть метод JSON.parse(), но как получить ссылку на JSON я не знаю.

Борис_С

Вот как выглядит ответ на мой запрос:

"[

    {
        "fragment":"ГОСТ 12345",
        "startPos":0,
        "endPos":9,
        "unambiguous":true,
        "documents":
        [
            {"url":"normacs://gla.ru/1m","matched":true,"reliable":true},
            {"url":"normacs://normacs.ru/80s","matched":false,"reliable":false},
            {"url":"normacs://normacs.ru/ggp","matched":false,"reliable":false},
            {"url":"normacs://normacs.ru/47ec","matched":false,"reliable":false},
            {"url":"normacs://normacs.ru/3g1s","matched":false,"reliable":false}
        ]
    },
    {
        "fragment":"СП 126.13330",
        "startPos":17,
        "endPos":28,
        "unambiguous":true,
        "documents":
        [
            {"url":"normacs://normacs.ru/23fna","matched":false,"reliable":false},
            {"url":"normacs://normacs.ru/12783","matched":false,"reliable":false},
            {"url":"normacs://normacs.ru/262ld","matched":false,"reliable":false},
            {"url":"normacs://normacs.ru/10d1p","matched":false,"reliable":false},
            {"url":"normacs://normacs.ru/la","matched":false,"reliable":false}
        ]
    }
]"

Поскольку получить ссылку на JSON я не могу, я реализовал парсинг этого запроса используя строковые функции VBS. Это тоже работает, хотя не так красиво, как хотелось бы.

Борис_С

На странице https://www.example-code.com/vbscript/json_array_load_and_parse.asp нашел более простой ответ, как обработать результаты запроса.
Для этого нужно использовать JSON array и JSON object.
Есть правда одно неудобство: нужно загрузить стороннюю библиотеку Chilkat ActiveX.
После загрузки и инсталляции этой библиотеки довольно легко удается расшифровать все поля строки JSON.

economist

А в JavaScript и XHR, и fetch() возвращают на выбор или JSON, или его Text, причем асинхронно, не блокируя код. Использовать с LO код JS можно и есть даже несколько полезных Расширений на нем. Скорее всего проблема решаема и без библиотек.

Также одним из основных должен быть способ в LibreOffice с вызовом из LO Basic методом invoke() простого двустрочного скрипта на Python, который умеет в json всё.

То что вы распарсили текст - хорошо. Но как только json начнет содержать мегабайты - надо идти в JS и Python.

Вместе с асинхронщиной json творит чудеса отзывчивости и без него наш мир уже немыслим.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...