實現一個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庫。
由於知乎上有完整的教程,我只是會把我自己學習大牛的程式碼和感悟放在上面,希望能對有同等需求的人有幫助。