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