用C++20实现Json反序列化

用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, 那么

注意

施工中

总结


版权声明:本文为原创文章,转载请注明出处。

基于DCTF-CNN的射频指纹识别