欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解Python對(duì)Json的解析

 更新時(shí)間:2017年02月14日 11:55:04   作者:laixintao  
Json是一種常用的數(shù)據(jù)交換結(jié)構(gòu),由于輕量、易于閱讀和編寫等特點(diǎn),在網(wǎng)絡(luò)方面應(yīng)用很廣。下面這篇文章主要介紹了Python對(duì)Json解析的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。

Json簡(jiǎn)介

JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個(gè)子集。 JSON采用完全獨(dú)立于語言的文本格式,但是也使用了類似于C語言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成。

它的格式一般是這樣的:

對(duì)象是一個(gè)無序的“‘名稱/值'對(duì)”集合。一個(gè)對(duì)象以“{”(左括號(hào))開始,“}”(右括號(hào))結(jié)束。每個(gè)“名稱”后跟一個(gè)“:”(冒號(hào));“‘名稱/值' 對(duì)”之間使用“,”(逗號(hào))分隔。

例如下面這樣:

{"b": "Hello", "c": null, "a": true}

它的值可以是雙引號(hào)括起來的字符串(string)、數(shù)值(number)、true、false、 null、對(duì)象(object)或者數(shù)組(array)。這些結(jié)構(gòu)可以嵌套。


值(value)可以是雙引號(hào)括起來的字符串(string)、數(shù)值(number)、true、false、 null、對(duì)象(object)或者數(shù)組(array)。這些結(jié)構(gòu)可以嵌套。

使用Python編碼和解析Json

Python內(nèi)置了json包來幫助我們完成對(duì)json的操作。

將Python的字典結(jié)構(gòu)導(dǎo)出到j(luò)son使用json.dumps() ,將json讀成Python的字典結(jié)構(gòu),使用json.loads() 。

如果不是針對(duì)string操作而是對(duì)文件操作,分別使用json.load()函數(shù)和json.dump()函數(shù)。

import json
 
data = {
 'name' : 'ACME',
 'shares' : 100,
 'price' : 542.23
}
 
json_str = json.dumps(data)
data = json.loads(json_str)
 
# Writing JSON data to file
with open('data.json', 'w') as f:
 json.dump(data, f)
 
# Reading data back
with open('data.json', 'r') as f:
 data = json.load(f)

默認(rèn)的類型對(duì)應(yīng)如下:

JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None

其他數(shù)據(jù)類型與Json之間的編碼和解碼

一般來說,Python對(duì)json的解析是list或dict之間的操作,如果需要其他類型與json之間轉(zhuǎn)換,就需要object_hook參數(shù)。先定義一個(gè)類,將類的字典初始化成json的key-value鍵值對(duì)。這樣,json的參數(shù)就變成了類的屬性。

將一個(gè)JSON字典轉(zhuǎn)換為一個(gè)Python對(duì)象Python

>>> class JSONObject:
...  def __init__(self, d):
...   self.__dict__ = d
...
>>>
>>> data = json.loads(s, object_hook=JSONObject)
>>> data.name
'ACME'
>>> data.shares
50
>>> data.price
490.1

還可以通過指定“函數(shù)”來進(jìn)行轉(zhuǎn)換。

用函數(shù)來指定序列化的方法,即將對(duì)象的“屬性-值”對(duì)變成字典對(duì),函數(shù)返回一個(gè)字典,然后json.dumps會(huì)格式化這個(gè)字典。

如果是通過函數(shù)將json變成對(duì)象,首先獲得類名,然后通過__new__來創(chuàng)建一個(gè)對(duì)象(不調(diào)用初始化函數(shù)),然后將json字典的各個(gè)屬性賦給對(duì)象。

使用函數(shù)指定json轉(zhuǎn)換方式Python

def serialize_instance(obj):
 d = { '__classname__' : type(obj).__name__ }
 d.update(vars(obj))
 return d
 
# Dictionary mapping names to known classes
classes = {
 'Point' : Point
}
 
def unserialize_object(d):
 clsname = d.pop('__classname__', None)
 if clsname:
  cls = classes[clsname]
  obj = cls.__new__(cls) # Make instance without calling __init__
  for key, value in d.items():
   setattr(obj, key, value)
  return obj
 else:
  return d

使用方法如下:

>>> p = Point(2,3)
>>> s = json.dumps(p, default=serialize_instance)
>>> s
'{"__classname__": "Point", "y": 3, "x": 2}'
>>> a = json.loads(s, object_hook=unserialize_object)
>>> a
<__main__.Point object at 0x1017577d0>
>>> a.x
2
>>> a.y
3

總結(jié)

以上就是關(guān)于Python對(duì)Json解析的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用python能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • 動(dòng)態(tài)規(guī)劃之矩陣連乘問題Python實(shí)現(xiàn)方法

    動(dòng)態(tài)規(guī)劃之矩陣連乘問題Python實(shí)現(xiàn)方法

    這篇文章主要介紹了動(dòng)態(tài)規(guī)劃之矩陣連乘問題Python實(shí)現(xiàn)方法,較為詳細(xì)的分析了矩陣連乘問題的概念、原理并結(jié)合實(shí)例形式分析了Python相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-11-11
  • Python 爬取必應(yīng)壁紙的實(shí)例講解

    Python 爬取必應(yīng)壁紙的實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于Python 爬取必應(yīng)壁紙的實(shí)例講解,有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2020-02-02
  • python爬蟲 requests-html的使用

    python爬蟲 requests-html的使用

    這篇文章主要介紹了python爬蟲 requests-html的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python?redis模塊的使用教程指南

    Python?redis模塊的使用教程指南

    這篇文章主要為大家詳細(xì)介紹了Python?redis模塊的使用教程指南的相關(guān)資料,文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2022-10-10
  • python線程、進(jìn)程和協(xié)程詳解

    python線程、進(jìn)程和協(xié)程詳解

    Python被人詬病最多的大概就是性能差,在這里講一下 Python 的多進(jìn)程,多線程與協(xié)程。首先聲明這不是教程,看完這篇文章,大概能夠?qū)?Python 的多進(jìn)程與多線程有一定的了解。
    2016-07-07
  • Python使用Srapy框架爬蟲模擬登陸并抓取知乎內(nèi)容

    Python使用Srapy框架爬蟲模擬登陸并抓取知乎內(nèi)容

    這里我們來看如何通過Python使用Srapy框架爬蟲模擬登陸并抓取知乎內(nèi)容的實(shí)例,要實(shí)現(xiàn)持續(xù)的爬取需要利用到cookie的保存,我們首先還是來回顧一下cookie的相關(guān)知識(shí)點(diǎn):
    2016-07-07
  • Django權(quán)限設(shè)置及驗(yàn)證方式

    Django權(quán)限設(shè)置及驗(yàn)證方式

    這篇文章主要介紹了Django權(quán)限設(shè)置及驗(yàn)證方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python spilt()分隔字符串的實(shí)現(xiàn)示例

    python spilt()分隔字符串的實(shí)現(xiàn)示例

    split() 方法可以實(shí)現(xiàn)將一個(gè)字符串按照指定的分隔符切分成多個(gè)子串,本文介紹了spilt的具體使用,感興趣的可以了解一下
    2021-05-05
  • 深度學(xué)習(xí)TextRNN的tensorflow1.14實(shí)現(xiàn)示例

    深度學(xué)習(xí)TextRNN的tensorflow1.14實(shí)現(xiàn)示例

    這篇文章主要介紹了深度學(xué)習(xí)TextRNN的tensorflow1.14實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 基于python3+OpenCV實(shí)現(xiàn)人臉和眼睛識(shí)別

    基于python3+OpenCV實(shí)現(xiàn)人臉和眼睛識(shí)別

    這篇文章主要為大家詳細(xì)介紹了基于python3+OpenCV實(shí)現(xiàn)人臉和眼睛識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評(píng)論