• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Json парсер от меня

Jurddox

RAID-массив
Забанен
Регистрация
22.09.2020
Сообщения
93
Реакции
4
Пожалуйста, обратите внимание, что пользователь заблокирован
Всем привет, сегодня я вам попытаюсь объяснить как можно легко парсить данные из json формата. И это не будут либы которые весят по 20кб. Вот код:
C++:
#include <vector>
#include <shlwapi.h>
#include <iostream>

void split(std::vector<LPCSTR> &vec, char* line, const char* symbol)
{
    char* part = strtok(line, symbol);
    while (part)
    {
        vec.push_back(part);
        part = strtok(NULL, symbol);
    }
}

void test()
{
    char* value = NULL; // Строка, в которую будет помещено нужное значение
    std::vector<LPCSTR> vec;  //Вектор, в который будет записаны данные, разбитые на "
    split(vec, json, "\"");  //json - сами json данные
    for (int i = 0; i < vec.size(); i++)
    {
        if (strcmp(vec[i], "value") == 0) //Сравниваем строки, если vec[i] наш ключ, то идём дальше
        {
            value = (char*)malloc(strlen(vec[i] + 2) + 1);  //Выделение памяти
            strcpy(value, vec[i + 2]);  //vec[i + 2] - будет само значение ключа "value"
            break; //Выходим с цикла
        }
    }
    if (value != NULL)
    {
        std::cout << value << std::endl; // Выводим значение
        free(value); //Очищаем память
    }
}
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Всем привет, сегодня я вам попытаюсь объяснить как можно легко парсить данные из json формата. И это не будут либы которые весят по 20кб. Вот код:
использование векторов stl добавит 100 с чем-то кб. Так что лучше либу с весом 20кб. А вообще, в идеале парсить регулярками. Вот это я бы назвал парсер.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
использование векторов stl добавит 100 с чем-то кб. Так что лучше либу с весом 20кб. А вообще, в идеале парсить регулярками. Вот это я бы назвал парсер.
Я добавил вектор как пример, можно использовать vector.h(видел в других стиллерах), да и он занимает всего то 3кб веса, кому нужно могу скинуть, пишите в лс. И так збс будет
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Чел что это за херь?
Ты берешь свой джсон и сплитишь по символу ".
Рез. помещаешь в вектор.
Но видимо ты забыл формат джсон. В джсоне может не быть двойных кавычек (в значении)
Т.е. не сработает в случае отсутствия кавычек. Удали тему, не засоряй форум
 
ТС, прогони вот этот json из вики и ты поймёшь свои ошибки:
JSON:
{
   "firstName": "Иван",
   "lastName": "Иванов",
   "address": {
       "streetAddress": "Московское ш., 101, кв.101",
       "city": "Ленинград",
       "postalCode": 101101
   },
   "phoneNumbers": [
       "812 123-1234",
       "916 123-4567"
   ]
}
 
Пожалуйста, обратите внимание, что пользователь заблокирован
ТС, прогони вот этот json из вики и ты поймёшь свои ошибки:
JSON:
{
   "firstName": "Иван",
   "lastName": "Иванов",
   "address": {
       "streetAddress": "Московское ш., 101, кв.101",
       "city": "Ленинград",
       "postalCode": 101101
   },
   "phoneNumbers": [
       "812 123-1234",
       "916 123-4567"
   ]
}
посмотри по активу чела. Он пытается стилер написать и пытается взять значение из Local State ключ aes. Хотя это изи делается при помощи регулярок.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А вообще, в идеале парсить регулярками
Регулярки не панацея для парсинга. Они будут гораздо медленнее, чем обычный парсер, основанный на стейт машине. И регулярками очень сложно будет распарсить JSON, структура рекурсивная, нужно будет применять регулярки рекурсивно, при этом использовать "жадные" регулярки.

По сабжу: так явно делать нельзя, никакой JSON нормально так не распарсишь. Уже существует куча готовых библиотек для парсинга JSON на Си, в том числе и однофайловых, изобретать свой костыльный велосипед не имеет никакого смысла.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Он пытается стилер написать и пытается взять значение из Local State ключ aes
не угадал
 
Пожалуйста, обратите внимание, что пользователь заблокирован
посмотри по активу чела. Он пытается стилер написать и пытается взять значение из Local State ключ aes. Хотя это изи делается при помощи регулярок.
и кстати как раз таки это пойдет для парсинга значений ключа, т.к все данные расположены в строку
 
Пожалуйста, обратите внимание, что пользователь заблокирован
и кстати как раз таки это пойдет для парсинга значений ключа, т.к все данные расположены в строку
Согласен) Но хз, я юзаю чистый винапи. Мне по кайфу работать с char и вырезать ключ без лишнего мозгоебства
 
Не, ну это все хорошо конечно, я понимаю, что мотивации учить, что-то гораздо больше, когда ты заинтересован в данной теме (стиллер в данном случае), но надо все таки как-то сопоставлять свои скиллы и таргет проджект, и сможешь ли ты его реализовать хоть какую-то его часть его более менее адекватно, а вторую часть выучишь в процессе, но все таки если вы не знаете как выглядит дефолт жсон формат и называете это жсон парсером, возможно стоит все таки сделать шаг назад и выбрать проект попроще, чтоб выучить хоть некоторые основы и писать будущие проекты уже с более серьезным фундаментом
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх