json格式及json在Python和C/C++中的使用

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成,因而在工业界得到广泛应用。

        json有两种结构,对象形式和数组形式。

       对象形式的json是一个无序的键值对集合,如{"hello":"world"},多个键值对用逗号分隔。

        数组形式的json是值的有序集合:[“hello”,"world"],多个值用逗号分隔。

json的对象形式和数组形式可以嵌套,使得json可以表示非常复杂的结构。


一、json在Python中的使用

Python下有多种json库,使用的比较多的是json-py、simplejson和C-json。Python2.6以后,自带simplejson。

使用json首先需要导入json库,如果你不确定你的python版本,比较好的写法如下:

  1. try:  
  2.         import simplejson as json  
  3.     except Exception, e:  
  4.         import json  
使用最多的函数如下:

(1)dumps函数
将python字典或列表json化
simplejson.dumps({'fir':'hello','sec':'world','thr':'!!'})
可在dumps中指定sort_keys参数,设置是否需要排序。排序按照key值进行
simplejson.dumps({'fir':'hello','sec':'world','thr':'!!'},sort_keys=True)

(2)loads函数
将json格式解析成python格式,可以是字典也可以是列表
obj = json.loads('["foo",{"bar":["baz",null,1.0,2]}]')

与上述两个函数对应的是dump函数和load函数,它们的处理对象是json文件流。

一段完整的代码如下:

  1. try:  
  2.     import simplejson as json  
  3. except Exception, e:  
  4.     import json  
  5.   
  6. def testjson():  
  7.     try:  
  8.         return_dict = {"return_code":"200"}  
  9.         return json.dumps(return_dict)  
  10.     except Exception, e:  
  11.         return_dict = {"return_code":"201"}  
  12.         return return json.dumps(return_dict)  
  13.   
  14. if __name__ == "__main__":  
  15.     res_dict = json.loads(testjson())  
  16.     if res_dict["return_code"] == "200":  
  17.        print "OK"  
  18.     elif res_dict["return_code"] == "201"  
  19.         print "BAD"  
  20.     else:  
  21.         print "ERROR!"  

二、json在C/C++下的使用
在C/C++下使用json必须下载json-c并安装。

安装完成后,使用时要下include “json.h”

        头文件中提供了丰富的json函数供我们使用。列举常用的如下:

1)json_object类型

json_object类型表示json对象,通常我们使用该类型的指针。各函数返回的基本也是json_object*类型的。

(2) json_tokener_parse

将json类型的string转成json对象,返回值为json_object*类型,失败返回null。

(3)json_object_get_*

这是一类方法,*用类型替换,比如json_object_get_int,json_object_get_string等,返回值就是对应的类型。该类函数的作用是将json类型转成需要的类型。是最常用的函数

(4)json_object_object_get

        这个函数使用的很广泛,作用是通过key获取value,函数需要接受两个参数,第一个表示存储value的json_object*,第二个表示key

(5)json_object_put

这个函数用于销毁一个json_object对象,接受参数为json_object*。我们使用完以后千万不要忘记调用该函数。因为json_object内部实现是new出来的,不调用就会造成内存泄露

注:json_object_put仅需要执行一次,只需要销毁父对象即可。比如存在一个json_object,从这个json_object下生成其它json_object,只需要把父json_object销毁,由它派生出的json_object都将被销毁。如果先销毁了子对象,再销毁父对象就会出错。此外,父对象也不能重复销毁,请不要重复调用json_object删除同一个对象


参考:

python下使用json:http://blog.sina.com.cn/s/blog_7ca42bff010185ha.html

C/C++下使用json:http://hi.baidu.com/jiangyangw3r/item/de986277a49b822ad7a89c9b

关于json、simplejson、cjson的性能讨论:

http://blog.csdn.net/chenggong2dm/article/details/9062803

http://blog.csdn.net/toontong/article/details/4979572

http://xmgu2008.blog.163.com/blog/static/139122380201411791731319/


————The End————

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值