python处理数据0和负数跳过_Python第十一章-常用的核心模块03-json模块
python 自稱(chēng) "Batteries included"(自帶電池, 自備干糧?), 就是因?yàn)樗峁┝撕芏鄡?nèi)置的模塊, 使用這些模塊無(wú)需安裝和配置即可使用.
本章主要介紹 python 的一些內(nèi)置常用核心模塊
Python 常用的核心模塊
三、json模塊
json模塊用于使用JSON序列化和反序列化對(duì)象.
JSON是JavaScript Object Notation的簡(jiǎn)寫(xiě), 也叫 JavaScript 對(duì)象符號(hào).
3.1 json語(yǔ)法格式
JSON 是一種輕量級(jí)的數(shù)據(jù)交換格式, 起源于JavaScript 的對(duì)象字面量形式, 但是嚴(yán)格上來(lái)說(shuō) JSON 并不能看成是JavaScript 對(duì)象的子集.
JSON 中主要有兩種數(shù)據(jù)類(lèi)型:json 對(duì)象{}和 json 數(shù)組[].
json 對(duì)象
用大括號(hào){}括起來(lái), 大括號(hào)中是key:value形式的數(shù)據(jù), 不同的鍵值對(duì)用,分開(kāi).
類(lèi)似于我們 python 中的字典(dict).
下面就是一個(gè) json 對(duì)象.
{
"name": "lisi",
"age" : 20
}
注意:
鍵和值中, 如果是字符串則一定要用雙引號(hào)括起來(lái).(單引號(hào)也可以, 但是雙引號(hào)在各個(gè)平臺(tái)和編程語(yǔ)言中兼容性更好)
如果是整數(shù), 則不需要使用雙引號(hào).
key一般使用字符串, value可以是任意類(lèi)型(字符串, json 數(shù)組, json 對(duì)象都可以).
json數(shù)組
使用[]括起來(lái), 存儲(chǔ)的數(shù)據(jù)可以是字符串, 數(shù)字, 和 json 對(duì)象.
類(lèi)似于我們 python 中的列表(list)
**
下面就是一個(gè)json數(shù)組**
[
{
"name":"lisi", # name --> 用戶(hù)名
"age" : 20 # age ---> 用戶(hù)使用年限
},
{
"name" : "zs",
"age" : 30
}
]
json數(shù)組中可以存儲(chǔ)字符串類(lèi)型
["a", "b", "c"]
3.2 json模塊基本使用
對(duì) json 一般有兩種操作:序列化(編碼)和反序列化(解碼).
序列化是指, 把 python 對(duì)象轉(zhuǎn)變成 json 格式的數(shù)據(jù), 并保存.
反序列化是指, 把 json 格式的數(shù)據(jù)轉(zhuǎn)變成 python 對(duì)象.
json 數(shù)據(jù)類(lèi)型和 python 數(shù)據(jù)類(lèi)型對(duì)應(yīng)關(guān)系
注意:
括號(hào)中的類(lèi)型表示可以把 python 中的類(lèi)型轉(zhuǎn)換成 JSON 類(lèi)型, 但是不能從 JSON 類(lèi)型轉(zhuǎn)換成 python 類(lèi)型
JSON 類(lèi)型
python 類(lèi)型
object
dict
array
list(tuple)
string
unicode(str, bytes)
number
int, float
true
True
false
False
null
None
說(shuō)明:
對(duì)于字符串?dāng)?shù)據(jù), 應(yīng)該假設(shè)使用的是 Unicode 字符串. 如果在編碼時(shí)遇到字節(jié)字符串, 則默認(rèn)使用utf-8將其解碼為 Unicode 的字符串. 解碼是, JSON 字符串總是以 Unicode 的形式返回.
序列化操作1:json.dump(obj, f, **opts)
將obj序列化到文件對(duì)象f中.
opts表示關(guān)鍵字參數(shù)的集合(多個(gè)關(guān)鍵字參數(shù)),可以通過(guò)這些參數(shù)來(lái)控制序列化的流程, 這些關(guān)鍵字參數(shù)都是可選的.
import json
d = {
"name": "zs",
"age": 30,
"girls": ["志玲", "鳳姐"]
}
json.dump(d, open("data.json", mode="w+"))
關(guān)鍵字參數(shù)說(shuō)明
關(guān)鍵字參數(shù)
說(shuō)明
skipkeys
布爾標(biāo)志.當(dāng)字典的key不是基本類(lèi)型(str, int, float, bool, None)時(shí)的處理方式. True就跳過(guò)這個(gè)key-value, False(默認(rèn)值)就拋一個(gè)異常TypeError
ensure_ascii
布爾標(biāo)志. 如果是True(默認(rèn)值), 則會(huì)把所有的非ascii字符進(jìn)行轉(zhuǎn)義處理, 如果是False則會(huì)把所有字符原樣輸出.要保證你的文件支持非ascii字符
check_circle
布爾標(biāo)志. 確定檢測(cè)容器的循環(huán)引用. 默認(rèn)值是True, 如果設(shè)置為False, 則不檢測(cè), 一旦出現(xiàn)了循環(huán)引用則會(huì)拋出異常OverflowEerror, 或者更糟
allow_nan
布爾標(biāo)志. 確定是否序列化范圍外的浮點(diǎn)數(shù).(nan, inf, -inf). 默認(rèn)值是True. 如果是False, 則當(dāng)序列化的值中有上面的值是會(huì)拋出異常ValueError
indent
一個(gè)非負(fù)整數(shù). 表示在打印數(shù)組和對(duì)象的時(shí)候的縮進(jìn)量(空格的個(gè)數(shù)). 默認(rèn)是None, 表示沒(méi)有縮進(jìn), 用最緊湊的方式顯示. 如果是0或負(fù)數(shù)或""則只換行,不縮進(jìn). 如果是個(gè)字符串, 則用這個(gè)字符串來(lái)縮進(jìn). 比如用:\t
separators
一個(gè)元組.(item_separator, key_separator), item_separator是指的數(shù)組元素之間的分隔符, key_separator是指的key 與 value之間的分隔符. 默認(rèn)是:(",", ":"). 永遠(yuǎn)不要更改默認(rèn)值
default
一個(gè)函數(shù). 如果某個(gè)value是 json 不支持的類(lèi)型, 則使用這個(gè)函數(shù)的返回值來(lái)替換value. python 會(huì)把那個(gè)不支持的類(lèi)型的數(shù)據(jù)作為參數(shù)傳遞到這個(gè)函數(shù)中.
sort_key
布爾值. 表示是否對(duì)字典的key進(jìn)行排序.默認(rèn)值False
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json
d = {
"name": "zs",
"age": 30,
"girls": ["志玲", "鳳姐"],
"a": float("1"),
"b": lambda : 2
}
json.dump(d, open("data.json", mode="w+", encoding="utf-8"),
ensure_ascii=False,
allow_nan=True,
indent=2,
separators=(",", ":"),
default=lambda a: "abc",
sort_keys=True)
print(int("1"))
序列化操作2:json.dumps(obj, **opts)
和json.dump()類(lèi)似, 只是這個(gè)函數(shù)是把序列化后的字符串以返回值的形式返回了.
反序列化操作1:json.load(f, **opts)
從文件反序列化JSON.
f文件對(duì)象.
opts表示關(guān)鍵字參數(shù)的集合(多個(gè)關(guān)鍵字參數(shù)),可以通過(guò)這些參數(shù)來(lái)控制反序列化的流程, 這些關(guān)鍵字參數(shù)都是可選的.
import json
with open("data.json", mode="r+", encoding="utf-8") as f:
obj = json.load(f)
print(obj)
關(guān)鍵字參數(shù)說(shuō)明
關(guān)鍵字參數(shù)
說(shuō)明
object_hook
一個(gè)函數(shù). 解析JSON 對(duì)象的時(shí)候調(diào)用的函數(shù). 默認(rèn)使用dict()
parse_float
一個(gè)函數(shù). 解析浮點(diǎn)數(shù)的時(shí)候使用. 默認(rèn)使用float()
parse_int
一個(gè)函數(shù). 解析整數(shù)的時(shí)候使用. 默認(rèn)使用int()
parse_constant
一個(gè)函數(shù). 解析常數(shù)的時(shí)候使用. 像-Infinity, Infinity, NaN, true, false
反序列化操作2:json.loads(s, **opts)
與json.load(f, **opts)類(lèi)似, 只是這個(gè)函數(shù)是從JSON 格式的字符串中反序列化數(shù)據(jù).
總結(jié)
以上是生活随笔為你收集整理的python处理数据0和负数跳过_Python第十一章-常用的核心模块03-json模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 信息系统管理工程师_关于备考信息系统项目
- 下一篇: python自动答题免费_直播答题?Py