lept_json的学习之JSON

本文介绍了lept_json库的学习,包括JSON的Parse解析和Stringify生成,讲解了数据类型并分享了单元测试的重要性。通过实例展示了如何使用lept_parse()和lept_stringify()函数,并强调了单元测试在代码评估和重构中的价值。
摘要由CSDN通过智能技术生成

lept_json库的学习1

从两个星期前开始,在github上跟着叶劲峰老师的lept_json学习了一遍,现在来回顾一下整个过程,做些笔记之类的。
本人的记录风格是废话一大堆,所以不爱看的可以骂我。


一、 什么是JSON

一开始我是完全不知道json是什么的,在我初步了解完c语言,而c++还没学多少的时候,我就在github上看到了这个项目,当时看到个#ifndefine都是懵的,看叶老师讲为什么宏要写在do{}while
里面看了半天。现在看来,其实懂了就是懂了,没懂就去看懂。

JSON呢,主要有两个功能:Parse解析和Stringify生成

情景

比如说,就是我有一个字符串json,大概长这样:

字符串 json = 
"
	{
   
		"Name":"LiuXingHuaHun",
		"IsMarried":false,
		"Money":6998,
		"Children":["zty","zsy"],
		"Possession":
			{
   
				"Cars":10,
				"House":20
			},
		"Girlfriend":null
	}
"

Parse解析

然后,我有一个json库,里面有一个函数叫Parse()

Parse的中文意思是解析,我一开始不认识这个单词,所以懵了好久(当时也没即时去查,像个傻逼一样,后来查了就懂了)

Parse()这个解析函数,有两个参数,比如叶老师教的lept_parse()

int lept_parse(lept_value& v, const char* json)

简单来讲,第一个参数类型lept_value是一个lept_json库里的一个通用数据结构,代码如下:

struct lept_value{
   
	//一个值不可能同时为数字和字符串,因此我们可使用 C 语言的 union 来节省内存:
	union{
   
		struct {
    lept_member* m; size_t size,capacity; }m_obj;/* object */
		struct {
    lept_value* e;  size_t size,capacity; }m_arr;/* array */
		struct  {
    char* s; size_t len; }m_str;      /* string */
		double m_num;                               /* number */
	}u;
	lept_type type;
};

不用看里面包含了什么,我们说第二个参数json,就是字符串,类型为char *。
parse()就是把字符串给转化为json内部的value数据结构,然后就可以用json内部的一些工具函数(人们叫他API),来更加灵活的有规则的使用这个json字符串里面包含的信息。进行一些运算啊,增删查改啊,分析啊之类的。

总之,然后我用完了之后,我得到了一堆信息,比如:

"
	{
   "LiuXingHuaHun": "nobody"}
"

Stringify生成

即使这个信息很简单,我需要发送出去,我还是需要将其转换为字符串吧。
然后就要用到Stringify()函数,也就是生成。(parse和stringify我是同时查的意思)
还是来看看lept_stringify长什么样吧

char* lept_stringify(const lept_value& v, size_t length)

这个函数也很好理解,你需要给他一个lept_value类型的数据,后面是这个数据的长度,然后他返回一个字符串。就是说它把你得到的信息,又转化为了字符串,然后就可以保存,或者是直观的阅读,发送给别人之类的。

因为内存分配什么的都需要精细操作,所以数据的长度作为一个参数是很有必要的,这是我个人的理解

JSON的主要作用就是解析和生成。
将文本信息解析转化为计算机可理解使用的数据结构,
将数据结构生成转化为人们可以阅读理解的文本信息。
(什么废话文学)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值