最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python操作JSON實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)交換

 更新時間:2022年06月22日 10:48:03   作者:? 編程學(xué)習(xí)網(wǎng)?  ?  
這篇文章主要介紹了Python操作JSON實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)交換,JSON的全稱是 JavaScript Object Notation,是一種輕量級的數(shù)據(jù)交換格式,關(guān)于JSON的更多相關(guān)內(nèi)容感興趣的小伙伴可以參考一下

前言

學(xué)學(xué)Python中操縱JSON的知識。學(xué)完本文,你可以學(xué)到如下內(nèi)容:

  • 1、JSON是什么?
  • 2、JSON與XML的優(yōu)劣差異?
  • 3、將Python對象編碼成JSON字符串
  • 4、將JSON字符串解碼為Python對象
  • 5、解決JSON中文亂碼問題

JSON是什么?

JSON的全稱是 JavaScript Object Notation,是一種輕量級的數(shù)據(jù)交換格式。最初,JSON 只是 JavaScript 的子集,但由于其簡單易用而迅速走紅。

現(xiàn)今大部分編程語言都支持對JSON的解析與生成,而近些年異軍突起的NoSQL數(shù)據(jù)庫也多參照J(rèn)SON來設(shè)計數(shù)據(jù)存儲格式,例如Mongodb的BSON(Binary JSON)。

JSON有以下六種數(shù)據(jù)類型:number、boolean、string、null、array、object。前三種很好理解,第四個null對應(yīng)Python的None,最后兩種,對應(yīng)Python的列表和字典。

 {
   "name": "小明",
   "age": 14,
   "gender": true,
   "grade": null,
  "skills": [
     "JavaScript",
    "Java",
     "Python"
  ]
}

JSON與XML的優(yōu)劣差異?

在JSON出現(xiàn)之前,人們用XML在網(wǎng)絡(luò)上交換數(shù)據(jù),在JSON出現(xiàn)后,它基本上就取代了XML的位置。兩者的共同之處顯而易見,它們都是結(jié)構(gòu)化的語言,都可以用于網(wǎng)絡(luò)數(shù)據(jù)的交換。

兩者最大的差異在于它們的“出身”不同,也就是它們被創(chuàng)造的目的不同。

XML是W3C(萬維網(wǎng)聯(lián)盟)發(fā)布的可擴(kuò)展標(biāo)記語言(Extensible Markup Language),最初設(shè)計來彌補(bǔ)HTML的不足,以強(qiáng)大的擴(kuò)展性滿足網(wǎng)絡(luò)信息發(fā)布的需要,與它“同級”的有:XHTML\CSS\ECMAScript等。它包含DTD、XSD、XPath、XSL等一大堆復(fù)雜的規(guī)范,在數(shù)據(jù)存儲、擴(kuò)展及高級檢索等方面都有作用。后來被用于網(wǎng)絡(luò)數(shù)據(jù)交換,頗有點大材小用的意思,雖然可勝任,卻也有點復(fù)雜和冗余。

而JSON是ECMAScript標(biāo)準(zhǔn)的子集,設(shè)計之初就是為了克服XML在數(shù)據(jù)交換上的劣勢,所以一方面,它像XML一樣具有簡潔而清晰的層次結(jié)構(gòu),另一方面,它比XML小巧精致,更加適用于網(wǎng)絡(luò)數(shù)據(jù)的傳輸。

JSON也不是沒有缺點,當(dāng)結(jié)構(gòu)層級很多的時候,它會讓人陷入繁瑣復(fù)雜的數(shù)據(jù)節(jié)點查找中,在可讀性上要比XML差。

將Python對象編碼成JSON字符串

將python的對象轉(zhuǎn)化為字符串,這個過程也稱為序列化,與之相對,將JSON字符串轉(zhuǎn)化為python對象,這個過程被稱為反序列化。

序列化格式如下,json.dumps()把python對象序列化,json.dump() 先序列化,然后將內(nèi)容存入文件:

json.dumps(obj,
, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False,
*kw)
json.dump(obj, fp,
, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False,
*kw)
In [1]: import json
In [2]: d = dict(name='Tom', age='8', score=88)
In [3]: json.dumps(d)
Out[3]: '{"name": "Tom", "age": "8", "score": 88}'
In [4]: with open('test.json', 'w') as f:
   ...:     json.dump(d, f)

用的比較多的參數(shù)有:

  • ensure_ascii=True 設(shè)置是否編碼為ASCII,默認(rèn)是,若False,則使用原編碼碼格式
  • indent=None 設(shè)置打印時縮進(jìn),默認(rèn)不縮進(jìn)
  • separators=None 設(shè)置分隔符,取值是(item_separator, dict_separator)元組,默認(rèn)為(‘,’,’:’),這表示keys之間用“,”隔開,而key和value之間用“:”隔開
  • sort_keys=False 設(shè)置按key值排序,默認(rèn)不排序

將JSON字符串解碼為Python對象

反序列化格式如下,json.loads()從內(nèi)存中讀取內(nèi)容解析,json.load() 從文件中讀取內(nèi)容解析:

json.loads(s,

, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None,

*kw)

json.load(fp,

, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None,

*kw)

In [1]: import json2In [2]: d = dict(name='Tom', age='8', score=88)
In [3]: tom_json = json.dumps(d)
In [4]: json.loads(tom_json)
Out[4]: {'age': '8', 'name': 'Tom', 'score': 88}
In [5]: with open('test.json', 'r') as f:
   ...:     print(json.load(f))
{'name': 'Tom', 'age': '8', 'score': 88}

json.loads()比json.load() 多了一個encoding參數(shù),可以將傳入的字符串重新編碼。

解決中文亂碼問題

序列化的ensure_ascii參數(shù)與反序列化的encoding相對應(yīng),都是處理字符編碼,一旦處理不好,就會導(dǎo)致中文亂碼問題。

Python2的字符編碼亂七八糟,也廣被人詬病,如果不幸遇到Python2項目,可參照如下例子解決。

字符串在Python2內(nèi)部的表示是unicode編碼。因此,在做編碼轉(zhuǎn)換時,需要以unicode作為中間編碼,即先將其他編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。

 # -*- coding: utf-8 -*-
 m = {'a' : '你好'}
 print m
 =>{'a': '\xe4\xbd\xa0\xe5\xa5\xbd'}
 print json.dumps(m)
 =>{"a": "\u4f60\u597d"}

print json.dumps(m,ensure_ascii=False)
=>{"a": "浣犲ソ"}
print json.dumps(m,ensure_ascii=False).decode('utf8').encode('gb2312')
=>{"a": "你好"}

Python3的默認(rèn)編碼格式是utf-8,以上例子,只需要ensure_ascii=False,就能解決。

到此這篇關(guān)于Python操作JSON實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)交換的文章就介紹到這了,更多相關(guān) Python操作JSON 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PyCharm 2020.1版安裝破解注冊碼永久激活(激活到2089年)

    PyCharm 2020.1版安裝破解注冊碼永久激活(激活到2089年)

    這篇文章主要介紹了PyCharm 2020.1版安裝破解注冊碼永久激活(激活到2089年),需要的朋友可以參考下
    2020-09-09
  • Python使用Pandas庫實現(xiàn)MySQL數(shù)據(jù)庫的讀寫

    Python使用Pandas庫實現(xiàn)MySQL數(shù)據(jù)庫的讀寫

    這篇文章主要介紹了Python使用Pandas庫實現(xiàn)MySQL數(shù)據(jù)庫的讀寫 ,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 使用 tf.nn.dynamic_rnn 展開時間維度方式

    使用 tf.nn.dynamic_rnn 展開時間維度方式

    今天小編就為大家分享一篇使用 tf.nn.dynamic_rnn 展開時間維度方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • pygraphviz安裝教程

    pygraphviz安裝教程

    Graphviz 是一款由 AT&T Research 和 Lucent Bell 實驗室開源的可視化圖形工具,可以很方便的用來繪制結(jié)構(gòu)化的圖形網(wǎng)絡(luò),支持多種格式輸出,這篇文章主要介紹了pygraphviz安裝教程,需要的朋友可以參考下
    2023-02-02
  • pytorch 求網(wǎng)絡(luò)模型參數(shù)實例

    pytorch 求網(wǎng)絡(luò)模型參數(shù)實例

    今天小編就為大家分享一篇pytorch 求網(wǎng)絡(luò)模型參數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • PyTorch?模型?onnx?文件導(dǎo)出及調(diào)用詳情

    PyTorch?模型?onnx?文件導(dǎo)出及調(diào)用詳情

    這篇文章主要介紹了PyTorch模型onnx文件導(dǎo)出及調(diào)用詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Python 跨.py文件調(diào)用自定義函數(shù)說明

    Python 跨.py文件調(diào)用自定義函數(shù)說明

    這篇文章主要介紹了Python 跨.py文件調(diào)用自定義函數(shù)說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python工廠函數(shù)用法實例分析

    Python工廠函數(shù)用法實例分析

    這篇文章主要介紹了Python工廠函數(shù)用法,結(jié)合實例形式分析了Python工廠函數(shù)的概念、功能、使用方法及相關(guān)注意事項,需要的朋友可以參考下
    2018-05-05
  • Python多線程編程之threading模塊詳解

    Python多線程編程之threading模塊詳解

    這篇文章主要介紹了Python多線程編程之threading模塊詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python?Pyecharts繪制象形柱圖

    Python?Pyecharts繪制象形柱圖

    echarts是百度開源的一個數(shù)據(jù)可視化JS庫,主要用于數(shù)據(jù)可視化。pyecharts是一個用于生成Echarts圖表的類庫。實際上就是Echarts與Python的對接。本文將利用pyecharts庫繪制象形柱狀圖,感興趣的可以了解一下
    2022-01-01

最新評論

瑞金市| 密山市| 东安县| 卓资县| 曲靖市| 凤翔县| 兴化市| 登封市| 株洲县| 通许县| 井陉县| 布尔津县| 荃湾区| 静宁县| 科尔| 个旧市| 南宁市| 安岳县| 芷江| 榕江县| 道孚县| 泸溪县| 察隅县| 禹州市| 岳普湖县| 时尚| 肇东市| 麻江县| 宁武县| 九寨沟县| 东至县| 南郑县| 松桃| 鄂伦春自治旗| 乃东县| 额尔古纳市| 仁化县| 牟定县| 邢台县| 天镇县| 巴东县|