用C++20实现Json反序列化
概述
其实是2025WoC, 感觉反序列化思路还挺有趣的, 所以就写个文章记录一下
(顺便弥补博客多天没更新…)
核心思路是递归下降, 一开始不理解, 到后面的顿悟, 是个很有趣的过程
正文
深入理解Json
json
{
"name": "zhangSan",
"age": 20,
"is_student": true,
"score": 95.5,
"nothing": null,
"courses": ["Math", "English"],
"address": {
"city": "Beijing",
"zip": 100000
}
}上面是一个简单的Json示例, 可以看到Json的一个核心骨架, 由一个{...}包裹, 里面的数据则是很规整的字典类型(Python乱入), 都是Key:Class的类型, 而且Key是字符串, 后面的东西则可以是字符串(String), 布尔(Boolean), 数字(Number), 空(Null), 数组(Array), 然后?
最后一个似乎是另一个Json骨架? 没关系, 我们先跳过, 等到后面就清楚了.
思路
作为一个编程菜鸡, 这种复杂的东西还是先给AI跑一遍再说吧(变相参考代码)
c++
class Json;
using Null = std::monostate;
using Boolen = bool;
using Int = int;
using Double = double;
using String = std::string;
using Array = std::vector<Json>;
using Object = std::map<std::string, Json>;
using JsonValue = std::variant<Null, Boolen, Int, Double, String, Array, Object>;可以发现上面说的类型基本都有, 而且最后一个没对应上的竟然是Object, 也就是说其实Json本身是一个大Object? (反正我一开始就是这么想的), 不过后面写着写着, 发现并非如此.
问题
按照我一开始的想法区设计一个Json类, 就会想到核心类成员是一个Object, 不过简单想想就会发现这种逻辑完全说不通, 前面的std::string应该是什么呢? 后面存的为什么又是Json自己??
既然是Key:Class, 那么
注意
施工中
总结
版权声明:本文为原创文章,转载请注明出处。