现在的位置: 首页 > 综合 > 正文

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

2018年05月05日 ⁄ 综合 ⁄ 共 2404字 ⁄ 字号 评论关闭

        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版本,比较好的写法如下:

try:
        import simplejson as json
    except Exception, e:
        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文件流。

一段完整的代码如下:

try:
    import simplejson as json
except Exception, e:
    import json

def testjson():
    try:
        return_dict = {"return_code":"200"}
        return json.dumps(return_dict)
    except Exception, e:
        return_dict = {"return_code":"201"}
        return return json.dumps(return_dict)

if __name__ == "__main__":
    res_dict = json.loads(testjson())
    if res_dict["return_code"] == "200":
       print "OK"
    elif res_dict["return_code"] == "201"
        print "BAD"
    else:
        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————

抱歉!评论已关闭.