1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jackarain-static_json

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Сериализация C++/JSON

Введение

Позволяет преобразовывать структуру C++ в JSON или из JSON в структуру C++.

Мотивация

В некоторых прошлых проектах часто использовался JSON как протокол. При работе с соответствующим протоколом часто необходимо ссылаться на объект значения, проанализированный JSON, в каждом требуемом месте, а затем проходить через интерфейс, предоставляемый библиотекой значений JSON. Доступ к полям, необходимым для бизнеса, приводит к тому, что код, связанный с библиотекой JSON, появляется повсюду в коде, добавляя связь с библиотекой анализа JSON.

После понимания основных принципов boost.serialization была разработана эта библиотека. В процессе сериализации и десериализации накладные расходы static_json практически незначительны и зависят от эффективности библиотеки rapididjson.

С помощью этой библиотеки нам нужно только определить структуру данных C++, а затем сериализовать данные JSON в эту структуру. Таким образом, при доступе мы больше не используем интерфейс библиотеки JSON, а структуру C++, избегая тем самым связи с библиотекой JSON и снижая степень связанности проекта.

Как использовать

Вы можете просто включить библиотеки static_json.hpp и rapidjson (rapidjson также является только заголовком), или вы можете скопировать код в каталог include в свой собственный проект, а затем включить его. После этого можно начать использовать библиотеку.

Быстрый старт

#include "static_json.hpp"

int main() {
	using namespace static_json;

	std::vector<int> ai = {1, 3, 4, 7, 9};
	std::string a = to_json_string(ai);

	std::cout << a << std::endl;

	std::vector<int> af;
	from_json_string(af, a);
}

Инвазивная сериализация структуры C++

struct proto {
	int type;
	std::string name;
	double height;
	
	template <typename Archive>
	void serialize(Archive &ar)
	{
		ar	& JSON_SERIALIZATION_NVP(type)
			& JSON_SERIALIZATION_NVP(name)
			& JSON_SERIALIZATION_NVP(height);
	}
};

proto test1 {1, "abcd", 1.83};
std::string a = to_json_string(test1);

proto test2;
from_json_string(test2, a); // test2 такой же, как test1.

Неинтрузивная сериализация структуры C++

struct proto {
	int type;
	std::string name;
	double height;
};

template<class Archive>
void serialize(Archive& ar, proto& a)
{
	ar	& JSON_NI_SERIALIZATION_NVP(a, type)
		& JSON_NI_SERIALIZATION_NVP(a, name)
		& JSON_NI_SERIALIZATION_NVP(a, height);
}

proto test1 {1, "abcd", 1.83};
std::string a = to_json_string(test1);

proto test2;
from_json_string(test2, a); // test2 такой же, как test1.

Для более подробного использования см. src/main.cpp

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Очень быстрый, прямой и статически типизированный парсинг JSON с C++17 Развернуть Свернуть
BSL-1.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/jackarain-static_json.git
git@api.gitlife.ru:oschina-mirror/jackarain-static_json.git
oschina-mirror
jackarain-static_json
jackarain-static_json
master