JSON解析-python实现

发布时间:2019-09-24 08:27:17编辑:auto阅读(1838)

    本文从以下几个方面进行讨论:
    1. JSON的基本概念
    2. python解析JSON
    3. 参考

    1. JSON基本概念

    1.1 JSON概念及特点

    • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
    • JSON 是轻量级的文本数据交换格式
    • JSON 独立于语言,JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。
    • JSON 具有自我描述性,更易理解

    JSON 比 XML 更小、更快,更易解析。具体的JSON和XML的比较,可以参考博客:
    JSON与XML的区别比较

    1.2 JSON语法规则

    JSON 语法是 JavaScript 对象表示法语法的子集。

    • 数据在名称/值对中
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组

    JSON的数据保存在 名称/值 对中。
    名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值,例如:

    “Name” : “SunPro”

    JSON的值的类型有:

    • 数字(整数或浮点数)
    • 字符串(在双引号中)
    • 逻辑值(true 或 false)
    • 数组(在方括号中)
    • 对象(在花括号中)
    • null

    看一个JSON和XML的示例:
    表示中国部分省市数据如下

    {
        "name": "中国",
        "province": [{
            "name": "黑龙江",
            "cities": {
                "city": ["哈尔滨", "大庆"]
            }
        }, {
            "name": "广东",
            "cities": {
                "city": ["广州", "深圳", "珠海"]
            }
        }, {
            "name": "台湾",
            "cities": {
                "city": ["台北", "高雄"]
            }
        }, {
            "name": "新疆",
            "cities": {
                "city": ["乌鲁木齐"]
            }
        }]
    }

    对应的XML文件

    <?xml version="1.0" encoding="utf-8"?>
    <country>
        <name>中国</name>
        <province>
            <name>黑龙江</name>
            <cities>
                <city>哈尔滨</city>
                <city>大庆</city>
            </cities>
        </province>
        <province>
            <name>广东</name>
            <cities>
                <city>广州</city>
                <city>深圳</city>
                <city>珠海</city>
            </cities>
        </province>
        <province>
            <name>台湾</name>
            <cities>
                <city>台北</city>
                <city>高雄</city>
            </cities>
        </province>
        <province>
            <name>新疆</name>
            <cities>
                <city>乌鲁木齐</city>
            </cities>
        </province>
    </country>

    可以看到,JSON 简单的语法格式和清晰的层次结构明显要比 XML 容易阅读,并且在数据交换方面,由于 JSON 所使用的字符要比 XML 少得多,可以大大得节约传输数据所占用得带宽。

    2. python 解析JSON

    python通过json库来解析JSON
    使用 JSON 函数需要导入 json 库:import json。

    2.1 json函数

    函数 描述
    json.dumps() 将 Python 对象编码成 JSON 字符串
    json.loads() 将已编码的 JSON 字符串解码为 Python 对象

    2.2 python和JSON解析过程中的对应关系

    Decoding:

    JSON Python
    object dict
    array list
    string str
    number (int) int
    number (real) float
    true True
    false False
    null None

    Encoding:

    Python JSON
    dict object
    list, tuple array
    str string
    int, float, int- & float-derived Enums number
    True true
    False false
    None null

    看一下实例:

    import json
    data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
    jsonstr = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': ')) #格式化输出
    print(jsonstr)
    print(type(jsonstr))
    jsonDe = json.loads(jsonstr)
    print(jsonDe)
    print(type(jsonDe))

    json解析也可以使用python json模块封装的json.JSONDecoder 和 json.JSONEncoder 类
    详见 https://docs.python.org/3.5/library/json.html
    也可以使用第三方库:Demjson
    Demjson 是 python 的第三方模块库,可用于编码和解码 JSON 数据,包含了 JSONLint 的格式化及校验功能。
    Github 地址:https://github.com/dmeranda/demjson
    官方地址:http://deron.meranda.us/python/demjson/

    Reference

    1. 百度百科-JSON
    2. W3Schol-JSON 教程
    3. 3.

关键字