1. loads方法與load方法的異同
在Python中json是一個非常常用的模塊,這個主要有4個方法:
json.dumps
json.dump
json.loads
json.load
這里主要分析講解一下json的loads和load方法。
這兩個方法中都是把其他類型的對象轉為Python對象,這里先說明一下Python對象,
Python對象包括:
所有Python基本數據類型,列表,元組,字典,自己定義的類,等等等等,當然不包括Python的字符串類型,把字符串或者文件鎏中的字符串轉為字符串會報錯的
1.1不相同點:
loads操作的是字符串
load操作的是文件流
1.2 相同點
除了第一個參數(要轉換的對象)類型不同,其他所有的參數都相同
最終都是轉換成Python對象
1.3 例子
先來一個例子,除了要轉換的對象,其他什么參數都不傳:
s = '{"name": "wade", "age": 54, "gender": "man"}'
# json.loads讀取字符串並轉為Python對象
print("json.loads將字符串轉為Python對象: type(json.loads(s)) = {}".format(type(json.loads(s))))
print("json.loads將字符串轉為Python對象: json.loads(s) = {}".format(json.loads(s)))
# json.load讀取文件並將文件內容轉為Python對象
# 數據文件要s.json的內容 --> {"name": "wade", "age": 54, "gender": "man"}
with open('s.json', 'r') as f:
s1 = json.load(f)
print("json.load將文件內容轉為Python對象: type(json.load(f)) = {}".format(type(s1)))
print("json.load將文件內容轉為Python對象: json.load(f) = {}".format(s1))
1
2
3
4
5
6
7
8
9
10
11
2. 轉換成Python對象
由於loads和load兩個方法只是處理的數據源不同,其他的參數都是相同的,返回的結果類型也相同,故這是loads和load方法兩個只說一個,
日常工作中最常見的就是把字符串通過json.loads轉為字典,其實json的loads方法不僅可以把字符串轉為字典,還可以轉為任何Python對象。
比如說,轉成python基本數據類型:
print('json.loads 將整數類型的字符串轉為int類型: type(json.loads("123456"))) --> {}'.format(type(json.loads("123456"))))
print('json.loads 將浮點類型的字符串轉為float類型: type(json.loads("123.456")) --> {}'.format(type(json.loads("123.456"))))
print('json.loads 將boolean類型的字符串轉為bool類型: type(json.loads("true")) --> {}'.format((type(json.loads("true")))))
print('json.loads 將列表類型的字符串轉為列表: type(json.loads(\'["a", "b", "c"]\')) --> {}'.format(type(json.loads('["a", "b", "c"]'))))
print('json.loads 將字典類型的字符串轉為字典: type(json.loads(\'{"a": 1, "b": 1.2, "c": true, "d": "ddd"}\')) --> %s' % str(type(json.loads('{"a": 1, "b": 1.2, "c": true, "d": "ddd"}'))))
1
2
3
4
5
json模塊會根據你的字符串自動轉為最符合的數據類型,
但是需要注意的是不能把轉為字符串,否則會報json.decoder.JSONDecodeError錯誤:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
————————————————
版權聲明:本文為CSDN博主「荒野雄兵」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/daerzei/article/details/100598901