05-[dumps,loads]和[dump,load]區(qū)別

0、楔子

1)什么是數(shù)據(jù)提取瓷马?

簡(jiǎn)單的來(lái)說(shuō),數(shù)據(jù)提取就是從響應(yīng)中獲取我們想要的數(shù)據(jù)的過(guò)程

2)數(shù)據(jù)分類

  • 非結(jié)構(gòu)化的數(shù)據(jù):html,文本等
    處理方法:正則表達(dá)式跨晴、xpath欧聘、beautiful soup
  • 結(jié)構(gòu)化數(shù)據(jù):json,xml等

3)什么是JSON端盆?

JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式怀骤,它使得人們很容易的進(jìn)行閱讀和編寫。同時(shí)也方便了機(jī)器進(jìn)行解析和生成焕妙。

適用于進(jìn)行數(shù)據(jù)交互的場(chǎng)景蒋伦,比如網(wǎng)站前臺(tái)與后臺(tái)之間的數(shù)據(jù)交互。

4)如何找到返回json的url呢焚鹊?

  • 使用瀏覽器/抓包工具進(jìn)行分析 wireshark(windows/linux),tcpdump(linux)
  • 抓包手機(jī)app的軟件
圖1-1 json--python轉(zhuǎn)換

1痕届、json.dumps()

json.dumps()用于將dict類型的數(shù)據(jù)轉(zhuǎn)成str,因?yàn)槿绻苯訉ict類型的數(shù)據(jù)寫入json文件中會(huì)發(fā)生報(bào)錯(cuò)寺旺,因此在將數(shù)據(jù)寫入時(shí)需要用到該函數(shù)爷抓。

先來(lái)看一段代碼:

import json

# 學(xué)生信息
myinfo_dict = {"name":"李易陽(yáng)", "age":23, "sex":"男"}

# 類型
print(type(myinfo_dict))

# 轉(zhuǎn)換成json字符串?dāng)?shù)據(jù)
json_obj_str = json.dumps(myinfo_dict)

# 類型
print(type(json_obj_str))

輸出結(jié)果如下:

<class 'dict'>
<class 'str'>

再看官方文檔參數(shù)說(shuō)明如下:

def 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):

    Serialize ``obj`` to a JSON formatted ``str``.

    If ``skipkeys`` is true then ``dict`` keys that are not basic types
    (``str``, ``int``, ``float``, ``bool``, ``None``) will be skipped
    instead of raising a ``TypeError``.

    If ``ensure_ascii`` is false, then the return value can contain non-ASCII
    characters if they appear in strings contained in ``obj``. Otherwise, all
    such characters are escaped in JSON strings.

    If ``check_circular`` is false, then the circular reference check
    for container types will be skipped and a circular reference will
    result in an ``OverflowError`` (or worse).

    If ``allow_nan`` is false, then it will be a ``ValueError`` to
    serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
    strict compliance of the JSON specification, instead of using the
    JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).

    If ``indent`` is a non-negative integer, then JSON array elements and
    object members will be pretty-printed with that indent level. An indent
    level of 0 will only insert newlines. ``None`` is the most compact
    representation.

    If specified, ``separators`` should be an ``(item_separator, key_separator)``
    tuple.  The default is ``(', ', ': ')`` if *indent* is ``None`` and
    ``(',', ': ')`` otherwise.  To get the most compact JSON representation,
    you should specify ``(',', ':')`` to eliminate whitespace.

    ``default(obj)`` is a function that should return a serializable version
    of obj or raise TypeError. The default simply raises TypeError.

    If *sort_keys* is true (default: ``False``), then the output of
    dictionaries will be sorted by key.

    To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
    ``.default()`` method to serialize additional types), specify it with
    the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.

2、json.loads()

json.loads()用于將str類型的數(shù)據(jù)轉(zhuǎn)成dict阻塑。

import json  
   
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'}   
  
jsDumps = json.dumps(name_emb)      
 
# jsDumps是json字符串格式 
jsLoads = json.loads(jsDumps)   
  
print(name_emb)  
print(jsDumps)  
print(jsLoads)  
  
print(type(name_emb))  
print(type(jsDumps))  
print(type(jsLoads))     

官方文檔參數(shù)說(shuō)明如下:

def loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None,
        parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):

      Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance
    containing a JSON document) to a Python object.

    ``object_hook`` is an optional function that will be called with the
    result of any object literal decode (a ``dict``). The return value of
    ``object_hook`` will be used instead of the ``dict``. This feature
    can be used to implement custom decoders (e.g. JSON-RPC class hinting).

    ``object_pairs_hook`` is an optional function that will be called with the
    result of any object literal decoded with an ordered list of pairs.  The
    return value of ``object_pairs_hook`` will be used instead of the ``dict``.
    This feature can be used to implement custom decoders.  If ``object_hook``
    is also defined, the ``object_pairs_hook`` takes priority.

    ``parse_float``, if specified, will be called with the string
    of every JSON float to be decoded. By default this is equivalent to
    float(num_str). This can be used to use another datatype or parser
    for JSON floats (e.g. decimal.Decimal).

    ``parse_int``, if specified, will be called with the string
    of every JSON int to be decoded. By default this is equivalent to
    int(num_str). This can be used to use another datatype or parser
    for JSON integers (e.g. float).

    ``parse_constant``, if specified, will be called with one of the
    following strings: -Infinity, Infinity, NaN.
    This can be used to raise an exception if invalid JSON numbers
    are encountered.

    To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
    kwarg; otherwise ``JSONDecoder`` is used.

    The ``encoding`` argument is ignored and deprecated.

3蓝撇、json.dump()

json.dump()用于將dict類型的數(shù)據(jù)轉(zhuǎn)成str,并寫入到j(luò)son文件中陈莽。下面兩種方法都可以將數(shù)據(jù)寫入json文件.

import json    
    
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'}    
            
emb_filename = ('/home/cqh/faceData/emb_json.json')    
        
json.dump(name_emb, open(emb_filename, "w"))  

4渤昌、json.load()

json.load()用于從json文件中讀取數(shù)據(jù)。

import json    
  
emb_filename = ('/home/cqh/faceData/emb_json.json')    
  
jsObj = json.load(open(emb_filename))      
  
print(jsObj)  
print(type(jsObj))  
  
for key in jsObj.keys():  
    print('key: %s   value: %s' % (key,jsObj.get(key)))  

運(yùn)行結(jié)果如下:

{u'a': u'1111', u'c': u'3333', u'b': u'2222', u'd': u'4444'}
<type 'dict'>
key: a value: 1111
key: c value: 3333
key: b value: 2222
key: d value: 4444

總結(jié):

json.dumps : dict轉(zhuǎn)成str 走搁,一個(gè)是將字典轉(zhuǎn)換為字符串
json.loads: str轉(zhuǎn)成dict 独柑,一個(gè)是將字符串轉(zhuǎn)換為字典
json.dump 是將python數(shù)據(jù)保存成json文件
json.load 是讀取json數(shù)據(jù)(文件)

具有read()或者write()方法的對(duì)象就是類文件對(duì)象
f = open(“a.txt”,”r”),其中f就是類文件對(duì)象

@墨雨出品 必屬精品 如有雷同 純屬巧合
`非學(xué)無(wú)以廣才私植,非志無(wú)以成學(xué)忌栅!`
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市曲稼,隨后出現(xiàn)的幾起案子索绪,更是在濱河造成了極大的恐慌,老刑警劉巖贫悄,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑞驱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡窄坦,警方通過(guò)查閱死者的電腦和手機(jī)唤反,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門凳寺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人彤侍,你說(shuō)我怎么就攤上這事肠缨。” “怎么了拥刻?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵怜瞒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我般哼,道長(zhǎng)吴汪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任蒸眠,我火速辦了婚禮漾橙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘楞卡。我一直安慰自己霜运,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布蒋腮。 她就那樣靜靜地躺著淘捡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪池摧。 梳的紋絲不亂的頭發(fā)上焦除,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音作彤,去河邊找鬼膘魄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛竭讳,可吹牛的內(nèi)容都是我干的创葡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼绢慢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼灿渴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起胰舆,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逻杖,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后思瘟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闻伶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年滨攻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡光绕,死狀恐怖女嘲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诞帐,我是刑警寧澤欣尼,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站停蕉,受9級(jí)特大地震影響愕鼓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜慧起,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一菇晃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚓挤,春花似錦磺送、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至缤剧,卻和暖如春馅袁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鞭执。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工司顿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兄纺。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓大溜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親估脆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钦奋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345