JSON 即 JavaScript Object Natation,它是一種輕量級的數據交換格式,非常適合於服務器與 JavaScript 的交互。是獨立於語言的文本格式,並且采用了類似於C語言家族的一些習慣。JSON用於描述數據結構,有以下形式存在。
· 對象 (object):一個對象以“{”開始,並以“}”退出。一個對象包含一系列非排序的名稱/值對,每個名稱/值對之間使用“,”分區。
· 名稱/值(collection):名稱和值之間使用“:”隔開,一般的形式是:
{name:value}
一個名稱是一個字符串; 一個值可以是一個字符串,一個數值,一個對象,一個布爾值,一個有串行表,或者一個null值。
· 值的有串行表(Array):一個或者多個值用“,”分區後,使用“[”,“]”括起來就形成了這樣的列表,形如:
[collection, collection]
· 字符串:以""括起來的一串字符。
· 數值:一系列0-9的數字組合,可以為負數或者小數。還可以用“e”或者“E”表示為指數形式。
· 布林值:表示為 true 或者 false。
WEB開發
JSON最開始被廣泛的應用於WEB應用的開發,隨著Web2.0的方興未艾,JSON在WEB數據傳輸領域占有重要的地位。[來源請求]
NoSQL數據庫
相對於傳統的關系型數據庫,一些基於文檔存儲的NoSQL非關系型數據庫選擇JSON作為其數據存儲格式,比較出名的產品有:MongoDB、CouchDB、RavenDB等。
下面是一個描述人員信息的json數據”
{
"firstName": "John",
"lastName": "Smith",
"male": true,
"age": 25,
"address":
{
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber":
[
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
]
}
JSON-GLib是一個庫,實現了全JSON分析器使用GLib和的GObject。使用JSON - GLib的是有可能的解析和生成有效的JSON數據結構,利用一個DOM的API。的JSON GLib的還提供GObject的一體化,提供了序列化和反序列化能力GObject的實例,從JSON數據類型。JSON是JavaScript對象符 號,它可以用來表示對象和對象層次結構,同時保留人類可讀性。
GLib是GTK+和GNOME工程的基礎底層核心程序庫,是一個綜合用途的實用的輕量級的C程序庫,它提供C語言的常用的數據結構的定義、相關的處理函 數,有趣而實用的宏,可移植的封裝和一些運行時機能,如事件循環、線程、動態調用、對象系統等的API。它能夠在類UNIX的操作系統平台(如 LINUX, HP-UNIX等),WINDOWS,OS2和BeOS等操作系統台上運行。
GObject的對象系統提供了一種靈活的、可擴展的、並容易映射(到其它語言)的面向對象的C語言框架。它的實質可以概括為:
· 一個通用類型系統,用來注冊任意的、輕便的、單根繼承的、並能推導出任意深度的結構類型的界面,它照顧組合對象的定制、初始化和內存管理,類結構,保持對象的父子關系,處理這些類型的動態實現。也就是說,這些類型的實現是在運行時重置和卸載的;
· 一個基本類型的實現集,如整型,枚舉型和結構型等;
· 一個基本對象體系之上的基本對象類型的實現的例子--GObject基本類型;
· 一個信號系統,允許用戶非常靈活的自定義虛的或重載對象的方法,並且能充當非常有效力的通知機制;
· 一個可擴展的參數/變量體系,支持所有的能被用作處理對象屬性或其它參數化類型的基本的類型。
打開JSON-GLIB主頁:
https://wiki.gnome.org/action/show/Projects/JsonGlib?action=show&redirect=JsonGlib
下載0.99.2版。
下面這段代碼使用了json-glib庫讀取上述人員信息:
#include
#include
#include
int
main (int argc, char *argv[])
{
JsonParser *parser;
JsonNode *root;
GError *error;
if (argc < 2)
{
g_print ("Usage: test
return EXIT_FAILURE;
}
g_type_init ();
parser = json_parser_new ();
error = NULL;
json_parser_load_from_file (parser, argv[1], &error);
if (error)
{
g_print ("Unable to parse `%s': %s"\n, argv[1], error->message);
g_error_free (error);
g_object_unref (parser);
return EXIT_FAILURE;
}
root = json_parser_get_root (parser);
/* manipulate the object tree and then exit */
g_object_unref (parser);
return EXIT_SUCCESS;
}