PDA

Просмотр полной версии : [Include] JSON Parser



Bib
22.01.2018, 19:16
Решил поэкспериментировать и написать JSON парсер.
Инклуд позволяет легко извлекать необходимые данные формата JSON из ответа сервера.
Пока что доступен следующий функционал:


stock GetStringValue(data[], key[], output[], output_size = sizeof output) // возвращает в output[] строковое значение ключа

stock GetIntValue(data[], key[]) // возвращает целочисленное значение ключа

stock GetObject(data[], key[], output[], output_size = sizeof output) // возвращает в output[] содержимое объекта

// в ближайшее время добавлю массивы


Пример использования:


#include <a_http>
main()
{
HTTP(0, HTTP_GET, "freegeoip.net/json/youtube.com", "", "OnResponse");

}

forward OnResponse(index, response_code, data[]);
public OnResponse(index, response_code, data[])
{
new ip[22];
GetStringValue(data, "ip", ip);
print(ip);
new country_name[30];
GetStringValue(data, "country_name", country_name);
print(country_name);
printf("zipcode = %i", GetIntValue(data, "zip_code"));
}


Содержимое data[] при запросе выше:

{"ip":"172.217.12.238","country_code":"US","country_name":"United States","region_code":"CA","region_name":"California","city":"Mountain View","zip_code":"94043","time_zone":"America/Los_Angeles","latitude":37.4192,"longitude":-122.0574,"metro_code":807}


GitHub (https://github.com/EmanOK/JSON-Parser-for-Pawn) | Основы JSON (https://www.8host.com/blog/osnovy-raboty-s-json/)

Outsider
22.01.2018, 19:35
Наконец-то!

ziggi
22.01.2018, 19:40
Наконец-то!

В смысле наконец-то? JSON в SA-MP'е был 10 лет назад: http://forum.sa-mp.com/showthread.php?t=48439

Outsider
22.01.2018, 19:43
Не знал. Почему никто не юзает? Вместо всяких mxINI. Это же в разы удобнее.

ziggi
22.01.2018, 19:50
Не знал. Почему никто не юзает? Вместо всяких mxINI. Это же в разы удобнее.

Чем удобнее? INI редактировать проще, чем не форматированную JSON строку. Да и медленнее. Не знаю как DJson, но конкретно эта реализация прогоняет цикл по всему содержимому файла при каждом вызове GetStringValue/GetIntValue.

В плане хранения данных в файле, равных mxINI нет. Ну, если ты пользуешься YSI, то, наверное, лучше воспользоваться y_ini.

Outsider
22.01.2018, 19:53
Та да, тоже сейчас глянул код. Так мог сделать и я. )

Насчет проще не согласен. Может, дело привычки.

DJson поприятнее. Спасибо за ссылочку.

ziggi
22.01.2018, 19:58
Та да, тоже сейчас глянул код. Так мог сделать и я. )

Насчет проще не согласен. Может, дело привычки.

Что проще (JSON в файле выглядит именно так, одной строкой, без форматирования.)? Это:

{"ip":"172.217.12.238","country_code":"US","country_name":"United States","region_code":"CA","region_name":"California","city":"Mountain View","zip_code":"94043","time_zone":"America/Los_Angeles","latitude":37.4192,"longitude":-122.0574,"metro_code":807}

Или это:

ip = 172.217.12.238
country_code = US
country_name = United States
region_code = CA
region_name = California
...

Outsider
22.01.2018, 20:15
Понял теперь о чем ты. Никогда не сталкивался с не форматированным json, как бы смешно это не звучало. Если с этой стороны смотреть, твоя взяла. ))

Dima_Leonov
22.04.2019, 18:29
Остался у кого данный инклуд?