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