开源代码学习:json11源码阅读

本篇是《开源代码学习》的第二篇,上一篇为:《一文搞定json解析和封装问题,手把手带你学习CJSON开源代码》
本文阅读一下json11的代码,json11是使用C++11编写的json库,对json11代码或者使用感兴趣的小伙伴可以阅读一下此文。

json11

json11是json11是一个轻量级的C++11库, 提供JSON的序列化和反序列化功能.,
之前在解析json数据的时候,尝试了好几个json库,最终决定使用json11,主要有以下几个原因:

  1. json的通用功能
  2. 可以像使用C++类一样使用
  3. 中文不乱码,这是我选择这个库的主要原因

json11的github地址:json11.

json11源码阅读

项目结构

项目结构比较简单,只有俩个文件

json11.hpp
json11.cpp

ReamME

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
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值