在Python中,json數據和字符串的轉換可以使用json模塊或simplejson模塊。
json從Python2.6開始內置到了Python標准庫中,我們不需要安裝即可直接使用。
simplejson需要安裝后才可以使用。
一、安裝simplejson
pip install simplejson
二、使用json和simplejson將json格式的數據轉換成字符串
import json
import simplejson
list_json = [{'a': 'bbb'}, {'c': 'ddd'}, {'e': 'fff'}]
print(type(list_json))
json_str = json.dumps(list_json, ensure_ascii=False)
print(json_str)
print(type(json_str))
simplejson_str = simplejson.dumps(list_json, ensure_ascii=False)
print(simplejson_str)
print(type(simplejson_str))
運行結果:
[{"a": "bbb"}, {"c": "ddd"}, {"e": "fff"}]
[{"a": "bbb"}, {"c": "ddd"}, {"e": "fff"}]
json和simplejson都提供了dump()和dumps(),dump是用於將內容轉json字符串后寫入文件中,dumps是將json格式的數據(字典或字典組成的列表)轉換成json字符串。
在dumps對數據進行處理時,會做encoding(編碼)操作,dumps()中的ensure_ascii默認是為True的,會將中文也編碼成ascii,所以我們指定ensure_ascii=False。
三、使用json和simplejson將json字符串轉換成其他數據
json_list = json.loads(json_str, encoding='utf-8', strict=False)
print(json_list)
print(type(json_list))
simplejson_list = simplejson.loads(simplejson_str, encoding='utf-8', strict=False)
print(simplejson_list)
print(type(simplejson_list))
運行結果:無錫人流多少錢 http://www.bhnfkyy.com/
[{'a': 'bbb'}, {'c': 'ddd'}, {'e': 'fff'}]
[{'a': 'bbb'}, {'c': 'ddd'}, {'e': 'fff'}]
json和simplejson都提供了load()和loads(),load與dump對應,是用於從文件中讀取json字符串然后進行轉換的,loads是將json字符串直接轉換成Python數據類型。
在使用loads對json字符串進行轉換時,有時候可能因為json字符串的格式不是完全的符合json格式,會造成loads報錯,這時候我們可以設置參數strict=False,表示loads()時,不嚴格檢查json格式。
Bug描述:
在使用json.loads()將json字符串轉換成json數據時,報錯信息:Expecting ',' delimiter line l column .. (char ..),還遇到過這種報錯:Expecting ',' delimiter or '}': line l column .. (char ..)
這都是因為json字符串的樣式不是合法的json格式,一般這種情況是從數據庫中讀數據時或者從文件中讀數據時會發生.
最常出現的就是數據里面有雙引號",並且雙引號前沒有反斜杠轉義。所以在使用json.loads()時要先確認要loads()的json字符串是否合法。如果有雙引號則要有反斜杠轉義。
解決方法:
如果出現了上面的報錯,可以檢查是否有不合法的字符,如有雙引號,可以將雙引號進行轉義,避免解析時將其識別為json的雙引號造成雙引號多了報錯,如果里面有帶反斜杠\的url鏈接,可以將反斜杠\替換成斜杠/。
可以通過re正則進行匹配替換,或者用字符串的replace()方法替換。