XML | HTML | TXT
您当前位置:软件开发 >> 新闻动态 >> 软件开发技术 >> 浏览文章

C指针原理(85)-json-glib剖析

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主页:

下面这段代码使用了json-glib库读取上述人员信息:

#include

#include

#include

 

int

main (int argc, char *argv[])

{

JsonParser *parser;

JsonNode *root;

GError *error;

 

if (argc < 2)

{

g_print ("Usage: test \n");

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;

}


手机:18678812288 E-Mail:1069706080@qq.com
地址:山东省济南市舜耕路泉城公园东门园内向北50米 鲁ICP备07011972号 版权所有2008-2013 山东赢德信息科技有限公司