1. 程式人生 > >實現一個C語言版的JSON庫(1)

實現一個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的區別:

(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庫。

由於知乎上有完整的教程,我只是會把我自己學習大牛的程式碼和感悟放在上面,希望能對有同等需求的人有幫助。