Python json和simplejson的使用


  在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()方法替換。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM