设为首页 加入收藏

TOP

Python 3 中的json模块使用(一)
2018-06-09 10:08:00 】 浏览:549
Tags:Python json 模块 使用

1. 概述


JSON (java script Object Notation)是一种使用广泛的轻量数据格式. Python标准库中的json模块提供了JSON数据的处理功能.


Python中一种非常常用的基本数据结构就是字典(Dictionary). 它的典型结构如下:
d = {
    'a': 123,
    'b': {
        'x': ['A', 'B', 'C']
    }
}


而JSON的结构如下:
{
    "a": 123,
    "b": {
        "x": ["A", "B", "C"]
    }
}


可以看到, Dictionary和JSON非常接近, 而Python中的json库提供的主要功能, 也是两者之间的转换.


2. 读取JSON


json.loads方法可以将包含了一个JSON数据的str, bytes或者bytearray对象, 转化为一个Python Dictionary. 它的完型接口签名如下:
json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)


2.1 最简单的例子


json.loads最基本的使用方式就是将一个包含JSON数据的str传递给这个方法:
>>> json.loads('{"a": 123}')
{'a': 123}


注意


在Python中, str值可以放在一对单引号中, 也可以放在一对双引号中:
>>> 'ABC' == "ABC"
True


所以, 在定义Dictionary的str类型的键和值的时候, 使用单引号或者双引号都是合法和等价的:
>>> {"a": 'ABC'} == {'a': "ABC"}
True


但是, 在JSON中, 字符串数据只能放在双引号中, 因而json.loads方法处理的字符串的JSON内容中, 字符串必须使用双引号. 否则就会发生解码错误:
>>> json.loads("{'a': 123}")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py", line 355, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)


如果被处理的Python字符串是包含在双引号中的, 那么JSON中的双引号就需要转义:
>>> json.loads("{\"a\": 123}")
{'a': 123}


2.2 bytes和bytearray数据


对于内容是JSON数据的bytes和bytearray, json.loads方法也可以处理:
>>> json.loads('{"a": 123}'.encode('UTF-8'))
{'a': 123}
>>> json.loads(bytearray('{"a": 123}', 'UTF-8'))
{'a': 123}


2.3 编码格式


json.loads的第二个参数是encoding没有实际作用.


由于Python 3中str类型总是使用UTF-8编码, 所以s参数为str类型时, json.loads方法自动使用UTF-8编码. 并且, str不能以BOM字节开头.


当s参数为bytes或者bytearray时, json.loads方法会自动判断为UTF-8, UTF-16还是UTF-32编码. 默认也是将其按照UTF-8编码转化为str对象进行后续处理.


2.4 数据类型转换


JSON可以表示四种主类型数据


1.字符串 string


2.数字 number


3.布尔类 boolean


4.空值 null


以及两结数据结构


1.对象 object


2.数组 array


默认实现中, JSON和Python之间的数据转换对应关系如下表:


 


实际转换情况如下例:
>>> json.loads("""
... {
...    "obj": {
...            "str": "ABC",
...            "int": 123,
...            "float": -321.89,
...            "bool_true": true,
...            "bool_false": false,
...            "null": null,
...            "array": [1, 2, 3]
...    }
... }""")

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python 字节码介绍 下一篇Java泛型实例详解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目