【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类型的对象序列化为string
  • Json::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();

微信公众号:马志峰的编程笔记

记录一名普通程序员的成长之路

posted @ 2017-04-17 07:53  马志峰  阅读(1818)  评论(0编辑  收藏  举报