AmxxEasyHTTP + JSON

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
892
Реакции
149
Помог
25 раз(а)
Здравствуйте.
Пытаюсь разобраться с модулем AmxxEasyHTTP.
Имееться get запрос к сайту, который в JSON формате возращает ответ (как на скрине).
1705362158254.png
Пытаюсь понять, как именно мне разбить этот json, что-бы получить из него потом нужные мне значения? К примеру, используя
C++:
/**
 * Parses JSON string or a file that contains JSON.
 *
 * @note                    Needs to be freed using ezjson_free() native.
 *
 * @param string            String to parse
 * @param is_file           True to treat string param as filename, false otherwise
 * @param with_comments     True if parsing JSON includes comments (it will ignore them), false otherwise
 *
 * @return                  EzJSON handle, EzInvalid_JSON if error occurred
 */
native EzJSON:ezjson_parse(const string[], bool:is_file = false, bool:with_comments = false);
Но я не до конца понимаю, как грамотно его использовать, примеры использования, к сожалению, не нашёл.

C++:
#include <amxmodx>
#include <easy_http>

public plugin_init() {
    set_task(2.0, "http_get");
}

public http_get()
{
    ezhttp_get("http://localhost/servercheck/get.php?ID=17&ServerKey=UQkAifhdkSJeH5XflJliuhcPxtol2wiu", "http_complete");
}

public http_complete(EzHttpRequest:request_id)
{
    if (ezhttp_get_error_code(request_id) != EZH_OK)
    {
        new error[64]
        ezhttp_get_error_message(request_id, error, charsmax(error))
        server_print("Response error: %s", error);
        return
    }
    
    new data[512]
    ezhttp_get_data(request_id, data, charsmax(data))
    server_print("Response data: %s", data)
}
Возможно сможет кто-то подсказать, каким образом я могу достать значения, к примеру, ServerKey?
 
Сообщения
3,582
Реакции
1,569
Помог
137 раз(а)
ImmortalAmxx, ну это обычный json-формат, парсить точно так же как при использовании стандартного модуля json
 
Последнее редактирование:
Сообщения
892
Реакции
149
Помог
25 раз(а)
Спасибо за подсказку, Nordic Warrior.
По итогу всё получилось.

Упростил сам JSON формат.
1705369178925.png

И через код ниже сделал всё, как и хотел.
C++:
public http_complete(EzHttpRequest:request_id)
{
    if (ezhttp_get_error_code(request_id) != EZH_OK)
    {
        new error[64]
        ezhttp_get_error_message(request_id, error, charsmax(error))
        server_print("Response error: %s", error);
        return
    }
    
    new data[512]
    ezhttp_get_data(request_id, data, charsmax(data))
    server_print("Response data: %s", data)

    new EzJSON: iJsonFile = ezjson_parse(data)
    
    if(iJsonFile == EzInvalid_JSON) {
        return;
    }
    
    server_print("%i", ezjson_array_get_number(iJsonFile, 0))
    
    new szValue[32]
    ezjson_array_get_string(iJsonFile, 1, szValue, 31)

    server_print("%s", szValue)
    
    ezjson_free(iJsonFile);
}
1705369277315.png
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу