【Json11源码阅读】01 Json11库简介(Reamde翻译)
在完成了《c++ Primer》前12章的阅读后,第一次尝试阅读C++源码。
所以选择了一个很小的库,只有hpp和cpp两个代码文件。
主要目的:换一种方式学习,通过解决阅读过程中遇到的问题来学习C++知识。
json11
json11是一个轻量级的C++11库, 提供JSON的序列化和反序列化功能.
核心的对象是 json11::Json
. 可以用来表示任意类型的JSON数据:null
, bool
, number (int or double)
, string (std::string)
, array (std::vector)
, 或者object (std::map)
.
json11::Json
类型的对象和其他值类型一样,支持赋值、拷贝、传递、比较等操作. 我们还提供了辅助方法
Json::dump
用来将json11::Json
类型的对象序列化为stringJson::parse (static)
用来将std::string反序列化为json11::Json
类型的对象
使用C++11提供的初始化器可以很容易创建一个json11::Json
对象:
Json my_json = Json::object {
{ "key1", "value1" },
{ "key2", false },
{ "key3", Json::array { 1, 2, 3 } },
};
std::string json_str = my_json.dump();
这里还提供了一些内置的构造函数,可以将标准库类型和用户自定义类型自动的转化为json11::Json
对象。例如:
class Point {
public:
int x;
int y;
Point (int x, int y) : x(x), y(y) {}
Json to_json() const { return Json::array { x, y }; }
};
std::vector<Point> points = { { 1, 2 }, { 10, 20 }, { 100, 200 } };
std::string points_json = Json(points).dump();
json11::Json
同时支持下标和关键字索引:
Json json = Json::array { Json::object { { "k", "v" } } };
std::string str = json[0]["k"].string_value();
微信公众号:马志峰的编程笔记
记录一名普通程序员的成长之路