实现一个C语言版的JSON库(1)

什么是JSON

JSON(JavaScript Object Notation)是一个用于数据交换的文本格式,它源至于 JavaScript 语言,但它本身只是一种数据格式,可用于任何编程语言。现时具类似功能的格式有 XML等。

一个典型的JSON文本如下:

{
    "title": "Design Patterns",
    "subtitle": "Elements of Reusable Object-Oriented Software",
    "author": [
        "Erich Gamma",
        "Richard Helm",
        "Ralph Johnson",
        "John Vlissides"
    ],
    "year": 2009,
    "weight": 1.8,
    "hardcover": true,
    "publisher": {
        "Company": "Pearson Education",
        "Country": "India"
    },
    "website": null
}

从上述可得,JSON 是一个树状结构,而 JSON 只包含 6 种数据类型:

  • null: 表示为 null
  • boolean: 表示为 true 或 false
  • number: 表示为数值类型,一般为浮点数
  • string: 表示为 “…”
  • array: 表示为 [ … ]
  • object: 表示为 { … }

我们需要实现一个简单的C语言版本的JSON库,可以粗略概括为下面几点:

我们要实现的 JSON 库,主要是完成 3 个需求:

  • 把 JSON文本解析为一个树状数据结构(parse)。
  • 提供接口访问该数据结构(access)。
  • 把数据结构转换成 JSON文本(stringify)。

通俗的讲,就是在C语言环境下,给你一个json字符串,如何把它解析为一个(树状)结构体,并且提供对外的接口,比如说获取里面的某些值等,同时你也能够将这个数据结构转换为一个json文本。


一些和XML的比较

首先要说明的是,我自己并不是太了解XML,因此查阅了一些网上相关的资料,如果有理解错误请指出。

为什么要比较?

我想的是,XML和JSON现在都存在并且还在广泛使用,说明了这两中数据交换格式不可互相替代(至少现在是),同时写一个JSON库, 我想也必要简单了解一些XML。

我参考了这两篇博客JSON与XML的区别比较 和 Json和xml两者的区别

json与xml的区别:

(1).可读性方面:基本相同,xml的可读性比较好,更符合人阅读习惯

(2).可扩展性方面:都具有很好的扩展性

(3).编码难度方面:相对而言,json的编码比较容易

(4).解码难度:json的解码难度基本为零,xml需要考虑子节点和父节点

(5).数据体积方面:json相对于xml来讲,数据体积小,传递速度快一点

(6).数据交互方面:json与JavaScript的交互更加方面,更容易解析处理,更好的数据交互

(7).数据描述方面:xml对数据描述性比较快好

(8).传输速度方面:json的速度远远快于xml

其他

之前自己就想找个简单点的开源项目来写一写,最后看一看发现json相对来说比较容易一点,后来意外发现知乎上有个从零开始的 JSON 库教程,适合像我一样的普通大学生模仿学习,另外还有一点就是。。。CVTE实习生笔试题有一道关于JSON的题,但是我没写出来。。。综合以上种种,我打算自己写一个C语言JSON库。

由于知乎上有完整的教程,我只是会把我自己学习大牛的代码和感悟放在上面,希望能对有同等需求的人有帮助。

你可能感兴趣的:(C)