Позволяет преобразовывать структуру 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);
}
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.
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 )