亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python3的Json模塊詳解

系統 1875 0
原文鏈接: https://blog.csdn.net/swinfans/article/details/86501555

簡介

Json模塊主要用來進行Python對象的序列化和反序列化。
該模塊中常用的方法有以下四個:

  • json.dump
    將Python對象序列化為Json格式的數據流并寫入文件類型的對象中

  • json.dumps
    將Python對象序列化為Json格式的字符串

  • json.load
    從文件類型的對象中讀取Json格式的數據并反序列化成Python對象

  • json.loads
    將包含Json格式數據的字符串反序列化成Python對象

進行序列化時,Python類型與Json類型的轉換關系如下表所示:

Python JSON
dict object
list, tuple array
str string
int, float number
True true
False false
None null

進行反序列化時,Json類型與Python類型的轉換關系如下:

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

常用方法詳解

由于 json.dump json.dumps 這兩個方法、的作用與使用方法類似,故只對其中之一詳細介紹。
同樣地, json.load json.loads 這兩個方法的作用與使用方法類似,故也只對其中之一詳細介紹。

json.dumps

該方法包含一個位置參數和多個僅限關鍵字參數,分別如下所示:

  • obj
    要序列化的Python對象

  • skipkeys=False
    是否跳過要序列化的對象中字典元素的key不是基本類型的數據;
    如果為True,則跳過,如果為False,將拋出TypeError異常。

                    
                      
                        >>
                      
                      
                        >
                      
                       emp_info 
                      
                        =
                      
                      
                        {
                      
                      
                        'name'
                      
                      
                        :
                      
                      
                        'bob'
                      
                      
                        ,
                      
                       b
                      
                        'age'
                      
                      
                        :
                      
                      
                        24
                      
                      
                        }
                      
                      
                        # 包含key為bytes類型的元素
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      emp_info
                      
                        )
                      
                      
                        # skipkeys參數為默認值False
                      
                      
    Traceback 
                      
                        (
                      
                      most recent call last
                      
                        )
                      
                      
                        :
                      
                      
      File 
                      
                        "
                        
                          "
                        
                      
                      
                        ,
                      
                       line 
                      
                        1
                      
                      
                        ,
                      
                      
                        in
                      
                      
                        <
                      
                      module
                      
                        >
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py"
                      
                      
                        ,
                      
                       line 
                      
                        231
                      
                      
                        ,
                      
                      
                        in
                      
                       dumps
        
                      
                        return
                      
                       _default_encoder
                      
                        .
                      
                      encode
                      
                        (
                      
                      obj
                      
                        )
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py"
                      
                      
                        ,
                      
                       line 
                      
                        199
                      
                      
                        ,
                      
                      
                        in
                      
                       encode
        chunks 
                      
                        =
                      
                       self
                      
                        .
                      
                      iterencode
                      
                        (
                      
                      o
                      
                        ,
                      
                       _one_shot
                      
                        =
                      
                      
                        True
                      
                      
                        )
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py"
                      
                      
                        ,
                      
                       line 
                      
                        257
                      
                      
                        ,
                      
                      
                        in
                      
                       iterencode
        
                      
                        return
                      
                       _iterencode
                      
                        (
                      
                      o
                      
                        ,
                      
                      
                        0
                      
                      
                        )
                      
                      
    TypeError
                      
                        :
                      
                       keys must be 
                      
                        str
                      
                      
                        ,
                      
                      
                        int
                      
                      
                        ,
                      
                      
                        float
                      
                      
                        ,
                      
                      
                        bool
                      
                      
                        or
                      
                      
                        None
                      
                      
                        ,
                      
                      
                        not
                      
                      
                        bytes
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      emp_info
                      
                        ,
                      
                       skipkeys
                      
                        =
                      
                      
                        True
                      
                      
                        )
                      
                      
                        # skipkeys參數設置為True時則可成功序列化
                      
                      
                        '{"name": "bob"}'
                      
                    
                  
  • ensure_ascii=True
    是否將要序列化的對象中的字符串中的非ascii字符進行轉義。
    如果該參數為True,則將字符串中的非ascii字符轉義成unicode字符串,否則,將不會進行轉義。

                    
                      
                        >>
                      
                      
                        >
                      
                       message 
                      
                        =
                      
                      
                        '我愛Python3'
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      message
                      
                        )
                      
                      
                        # ensure_ascii參數默認值為True,將會把非ascii字符轉移成unicode字符串
                      
                      
                        '"\\u6211\\u7231Python3"'
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      message
                      
                        ,
                      
                       ensure_ascii
                      
                        =
                      
                      
                        False
                      
                      
                        )
                      
                      
                        # ensure_ascii參數設置為False時,不會進行轉義
                      
                      
                        '"我愛Python3"'
                      
                    
                  
  • check_circular=True
    是否進行容器類型的循環引用檢查。
    如果該參數設置為False,則不進行檢查,但是可能會引發OverflowError或更嚴重的情況。
    如果該參數設置為True,則將進行容器類型的循環引用檢查,并在發現循環引用時拋出異常。

                    
                      emp_dict 
                      
                        =
                      
                      
                        {
                      
                      
                        'id'
                      
                      
                        :
                      
                      
                        1
                      
                      
                        ,
                      
                      
                        'dept'
                      
                      
                        :
                      
                      
                        'sales'
                      
                      
                        }
                      
                      
                        >>
                      
                      
                        >
                      
                       emp_dict
                      
                        [
                      
                      
                        'info'
                      
                      
                        ]
                      
                      
                        =
                      
                       emp_dict  
                      
                        # 字典中包含循環引用
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      emp_dict
                      
                        )
                      
                      
                        # 默認進行循環引用的檢查,將引發ValueError異常
                      
                      
    Traceback 
                      
                        (
                      
                      most recent call last
                      
                        )
                      
                      
                        :
                      
                      
      File 
                      
                        "
                        
                          "
                        
                      
                      
                        ,
                      
                       line 
                      
                        1
                      
                      
                        ,
                      
                      
                        in
                      
                      
                        <
                      
                      module
                      
                        >
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py"
                      
                      
                        ,
                      
                       line 
                      
                        231
                      
                      
                        ,
                      
                      
                        in
                      
                       dumps
        
                      
                        return
                      
                       _default_encoder
                      
                        .
                      
                      encode
                      
                        (
                      
                      obj
                      
                        )
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py"
                      
                      
                        ,
                      
                       line 
                      
                        199
                      
                      
                        ,
                      
                      
                        in
                      
                       encode
        chunks 
                      
                        =
                      
                       self
                      
                        .
                      
                      iterencode
                      
                        (
                      
                      o
                      
                        ,
                      
                       _one_shot
                      
                        =
                      
                      
                        True
                      
                      
                        )
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py"
                      
                      
                        ,
                      
                       line 
                      
                        257
                      
                      
                        ,
                      
                      
                        in
                      
                       iterencode
        
                      
                        return
                      
                       _iterencode
                      
                        (
                      
                      o
                      
                        ,
                      
                      
                        0
                      
                      
                        )
                      
                      
    ValueError
                      
                        :
                      
                       Circular reference detected
    
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      emp_dict
                      
                        ,
                      
                       check_circular
                      
                        =
                      
                      
                        False
                      
                      
                        )
                      
                      
                        # 設置為不進行循環引用的檢查,但是在編碼Json對象時仍然引發了異常
                      
                      
    Traceback 
                      
                        (
                      
                      most recent call last
                      
                        )
                      
                      
                        :
                      
                      
      File 
                      
                        "
                        
                          "
                        
                      
                      
                        ,
                      
                       line 
                      
                        1
                      
                      
                        ,
                      
                      
                        in
                      
                      
                        <
                      
                      module
                      
                        >
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py"
                      
                      
                        ,
                      
                       line 
                      
                        238
                      
                      
                        ,
                      
                      
                        in
                      
                       dumps
      
                      
                        **
                      
                      kw
                      
                        )
                      
                      
                        .
                      
                      encode
                      
                        (
                      
                      obj
                      
                        )
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py"
                      
                      
                        ,
                      
                       line 
                      
                        199
                      
                      
                        ,
                      
                      
                        in
                      
                       encode
        chunks 
                      
                        =
                      
                       self
                      
                        .
                      
                      iterencode
                      
                        (
                      
                      o
                      
                        ,
                      
                       _one_shot
                      
                        =
                      
                      
                        True
                      
                      
                        )
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py"
                      
                      
                        ,
                      
                       line 
                      
                        257
                      
                      
                        ,
                      
                      
                        in
                      
                       iterencode
        
                      
                        return
                      
                       _iterencode
                      
                        (
                      
                      o
                      
                        ,
                      
                      
                        0
                      
                      
                        )
                      
                      
    RecursionError
                      
                        :
                      
                       maximum recursion depth exceeded 
                      
                        while
                      
                       encoding a JSON 
                      
                        object
                      
                    
                  
  • allow_nan=True
    是否允許序列化超出范圍的float類型的值(如float(‘inf’)、float(’-inf’)、float(‘nan’))。
    如果該參數設置為True,則上面列出的那些值將依次使用JavaScript中等價的值(Infinity、-Infinity、NaN)來進 行替代;
    如果該參數設置為False,并且要序列化的對象中出現了那些超出范圍的值,則將引發ValueError異常。

                    
                      
                        >>
                      
                      
                        >
                      
                       num_list 
                      
                        =
                      
                      
                        [
                      
                      
                        2
                      
                      
                        ,
                      
                      
                        5
                      
                      
                        ,
                      
                      
                        float
                      
                      
                        (
                      
                      
                        'inf'
                      
                      
                        )
                      
                      
                        ,
                      
                      
                        float
                      
                      
                        (
                      
                      
                        '-inf'
                      
                      
                        )
                      
                      
                        ,
                      
                      
                        float
                      
                      
                        (
                      
                      
                        'nan'
                      
                      
                        )
                      
                      
                        ]
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      num_list
                      
                        )
                      
                      
                        # allow_nan的值默認為True,列表中后三個值將被替換為js中等價的值
                      
                      
                        '[2, 5, Infinity, -Infinity, NaN]'
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      num_list
                      
                        ,
                      
                       allow_nan
                      
                        =
                      
                      
                        False
                      
                      
                        )
                      
                      
                        # allow_nan設置為False,引發ValueError異常
                      
                      
    Traceback 
                      
                        (
                      
                      most recent call last
                      
                        )
                      
                      
                        :
                      
                      
      File 
                      
                        "
                        
                          "
                        
                      
                      
                        ,
                      
                       line 
                      
                        1
                      
                      
                        ,
                      
                      
                        in
                      
                      
                        <
                      
                      module
                      
                        >
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py"
                      
                      
                        ,
                      
                       line 
                      
                        238
                      
                      
                        ,
                      
                      
                        in
                      
                       dumps
      
                      
                        **
                      
                      kw
                      
                        )
                      
                      
                        .
                      
                      encode
                      
                        (
                      
                      obj
                      
                        )
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py"
                      
                      
                        ,
                      
                       line 
                      
                        199
                      
                      
                        ,
                      
                      
                        in
                      
                       encode
        chunks 
                      
                        =
                      
                       self
                      
                        .
                      
                      iterencode
                      
                        (
                      
                      o
                      
                        ,
                      
                       _one_shot
                      
                        =
                      
                      
                        True
                      
                      
                        )
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py"
                      
                      
                        ,
                      
                       line 
                      
                        257
                      
                      
                        ,
                      
                      
                        in
                      
                       iterencode
        
                      
                        return
                      
                       _iterencode
                      
                        (
                      
                      o
                      
                        ,
                      
                      
                        0
                      
                      
                        )
                      
                      
    ValueError
                      
                        :
                      
                       Out of 
                      
                        range
                      
                      
                        float
                      
                       values are 
                      
                        not
                      
                       JSON compliant
    
                    
                  
  • indent=None
    是否在數組元素和對象成員前增加縮進以便使格式更加美觀。
    如果該參數設置為大于等于1的整數,則添加換行符和對應數量的空格表示縮進,如果設置為0,則表示只添加換行符,如果設置為None,則表示無縮進。

                    
                      
                        >>
                      
                      
                        >
                      
                       response 
                      
                        =
                      
                      
                        {
                      
                      
                        'status'
                      
                      
                        :
                      
                      
                        'success'
                      
                      
                        ,
                      
                      
                        'code'
                      
                      
                        :
                      
                      
                        200
                      
                      
                        ,
                      
                      
                        'data'
                      
                      
                        :
                      
                      
                        [
                      
                      
                        '002'
                      
                      
                        ,
                      
                      
                        'json'
                      
                      
                        ,
                      
                      
                        5000
                      
                      
                        ]
                      
                      
                        }
                      
                      
                        >>
                      
                      
                        >
                      
                      
                        print
                      
                      
                        (
                      
                      json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      response
                      
                        )
                      
                      
                        )
                      
                      
                        # 默認值None,不縮進
                      
                      
                        {
                      
                      
                        "status"
                      
                      
                        :
                      
                      
                        "success"
                      
                      
                        ,
                      
                      
                        "code"
                      
                      
                        :
                      
                      
                        200
                      
                      
                        ,
                      
                      
                        "data"
                      
                      
                        :
                      
                      
                        [
                      
                      
                        "002"
                      
                      
                        ,
                      
                      
                        "json"
                      
                      
                        ,
                      
                      
                        5000
                      
                      
                        ]
                      
                      
                        }
                      
                      
                        >>
                      
                      
                        >
                      
                      
                        print
                      
                      
                        (
                      
                      json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      response
                      
                        ,
                      
                       indent
                      
                        =
                      
                      
                        0
                      
                      
                        )
                      
                      
                        )
                      
                      
                        # 設置為0,則只添加換行
                      
                      
                        {
                      
                      
                        "status"
                      
                      
                        :
                      
                      
                        "success"
                      
                      
                        ,
                      
                      
                        "code"
                      
                      
                        :
                      
                      
                        200
                      
                      
                        ,
                      
                      
                        "data"
                      
                      
                        :
                      
                      
                        [
                      
                      
                        "002"
                      
                      
                        ,
                      
                      
                        "json"
                      
                      
                        ,
                      
                      
                        5000
                      
                      
                        ]
                      
                      
                        }
                      
                      
                        >>
                      
                      
                        >
                      
                      
                        print
                      
                      
                        (
                      
                      json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      response
                      
                        ,
                      
                       indent
                      
                        =
                      
                      
                        4
                      
                      
                        )
                      
                      
                        )
                      
                      
                        # 設置為4,添加換行和縮進
                      
                      
                        {
                      
                      
                        "status"
                      
                      
                        :
                      
                      
                        "success"
                      
                      
                        ,
                      
                      
                        "code"
                      
                      
                        :
                      
                      
                        200
                      
                      
                        ,
                      
                      
                        "data"
                      
                      
                        :
                      
                      
                        [
                      
                      
                        "002"
                      
                      
                        ,
                      
                      
                        "json"
                      
                      
                        ,
                      
                      
                        5000
                      
                      
                        ]
                      
                      
                        }
                      
                    
                  
  • separators=None
    設置Json中各項之間、對象的鍵和值之間的分隔符;
    該參數必須是一個2元組,元組第一個元素表示Json數據中各項之間的分隔符,元組的第二個元素表示Json對象的鍵和值之間的分隔符。默認的分隔符為(’,’, ‘:’)

                    
                      
                        >>
                      
                      
                        >
                      
                       response 
                      
                        =
                      
                      
                        {
                      
                      
                        'status'
                      
                      
                        :
                      
                      
                        'success'
                      
                      
                        ,
                      
                      
                        'code'
                      
                      
                        :
                      
                      
                        200
                      
                      
                        ,
                      
                      
                        'data'
                      
                      
                        :
                      
                      
                        [
                      
                      
                        '002'
                      
                      
                        ,
                      
                      
                        'json'
                      
                      
                        ,
                      
                      
                        5000
                      
                      
                        ]
                      
                      
                        }
                      
                      
                        >>
                      
                      
                        >
                      
                      
                        print
                      
                      
                        (
                      
                      json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      response
                      
                        ,
                      
                       separators
                      
                        =
                      
                      
                        (
                      
                      
                        ';'
                      
                      
                        ,
                      
                      
                        '!'
                      
                      
                        )
                      
                      
                        )
                      
                      
                        )
                      
                      
                        >>
                      
                      
                        >
                      
                      
                        print
                      
                      
                        (
                      
                      json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      response
                      
                        ,
                      
                       indent 
                      
                        =
                      
                      
                        4
                      
                      
                        ,
                      
                       separators
                      
                        =
                      
                      
                        (
                      
                      
                        ';'
                      
                      
                        ,
                      
                      
                        '!'
                      
                      
                        )
                      
                      
                        )
                      
                      
                        )
                      
                      
                        {
                      
                      
                        "status"
                      
                      !
                      
                        "success"
                      
                      
                        ;
                      
                      
                        "code"
                      
                      !
                      
                        200
                      
                      
                        ;
                      
                      
                        "data"
                      
                      !
                      
                        [
                      
                      
                        "002"
                      
                      
                        ;
                      
                      
                        "json"
                      
                      
                        ;
                      
                      
                        5000
                      
                      
                        ]
                      
                      
                        }
                      
                    
                  
  • default=None
    指定一個函數,用來將不可進行序列化的Python對象轉化為可序列化的Python對象

                    
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      b
                      
                        'hello world'
                      
                      
                        )
                      
                      
    Traceback 
                      
                        (
                      
                      most recent call last
                      
                        )
                      
                      
                        :
                      
                      
      File 
                      
                        "
                        
                          "
                        
                      
                      
                        ,
                      
                       line 
                      
                        1
                      
                      
                        ,
                      
                      
                        in
                      
                      
                        <
                      
                      module
                      
                        >
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py"
                      
                      
                        ,
                      
                       line 
                      
                        231
                      
                      
                        ,
                      
                      
                        in
                      
                       dumps
        
                      
                        return
                      
                       _default_encoder
                      
                        .
                      
                      encode
                      
                        (
                      
                      obj
                      
                        )
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py"
                      
                      
                        ,
                      
                       line 
                      
                        199
                      
                      
                        ,
                      
                      
                        in
                      
                       encode
        chunks 
                      
                        =
                      
                       self
                      
                        .
                      
                      iterencode
                      
                        (
                      
                      o
                      
                        ,
                      
                       _one_shot
                      
                        =
                      
                      
                        True
                      
                      
                        )
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py"
                      
                      
                        ,
                      
                       line 
                      
                        257
                      
                      
                        ,
                      
                      
                        in
                      
                       iterencode
        
                      
                        return
                      
                       _iterencode
                      
                        (
                      
                      o
                      
                        ,
                      
                      
                        0
                      
                      
                        )
                      
                      
      File 
                      
                        "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py"
                      
                      
                        ,
                      
                       line 
                      
                        179
                      
                      
                        ,
                      
                      
                        in
                      
                       default
        
                      
                        raise
                      
                       TypeError
                      
                        (
                      
                      f
                      
                        'Object of type {o.__class__.__name__} '
                      
                      
    TypeError
                      
                        :
                      
                       Object of 
                      
                        type
                      
                      
                        bytes
                      
                      
                        is
                      
                      
                        not
                      
                       JSON serializable
    
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      b
                      
                        'hello world'
                      
                      
                        ,
                      
                       default
                      
                        =
                      
                      
                        list
                      
                      
                        )
                      
                      
                        '[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]'
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      b
                      
                        'hello world'
                      
                      
                        ,
                      
                       default
                      
                        =
                      
                      
                        str
                      
                      
                        )
                      
                      
                        '"b\'hello world\'"'
                      
                    
                  
  • sort_keys=False
    是否要將對象中字典元素按照key進行排序。
    默認為False,即不進行排序,若指定為True,則會進行排序。

                    
                      
                        >>
                      
                      
                        >
                      
                       emp_info 
                      
                        =
                      
                      
                        {
                      
                      
                        'name'
                      
                      
                        :
                      
                      
                        'bob'
                      
                      
                        ,
                      
                      
                        'age'
                      
                      
                        :
                      
                      
                        23
                      
                      
                        ,
                      
                      
                        'dept'
                      
                      
                        :
                      
                      
                        'sales'
                      
                      
                        ,
                      
                      
                        'gender'
                      
                      
                        :
                      
                      
                        'male'
                      
                      
                        }
                      
                      
                        >>
                      
                      
                        >
                      
                      
                        print
                      
                      
                        (
                      
                      json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      emp_info
                      
                        ,
                      
                       indent 
                      
                        =
                      
                      
                        4
                      
                      
                        )
                      
                      
                        )
                      
                      
                        #  不按照key排序
                      
                      
                        {
                      
                      
                        "name"
                      
                      
                        :
                      
                      
                        "bob"
                      
                      
                        ,
                      
                      
                        "age"
                      
                      
                        :
                      
                      
                        23
                      
                      
                        ,
                      
                      
                        "dept"
                      
                      
                        :
                      
                      
                        "sales"
                      
                      
                        ,
                      
                      
                        "gender"
                      
                      
                        :
                      
                      
                        "male"
                      
                      
                        }
                      
                      
                        >>
                      
                      
                        >
                      
                      
                        print
                      
                      
                        (
                      
                      json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      emp_info
                      
                        ,
                      
                       indent 
                      
                        =
                      
                      
                        4
                      
                      
                        ,
                      
                       sort_keys
                      
                        =
                      
                      
                        True
                      
                      
                        )
                      
                      
                        )
                      
                      
                        # 按照key進行排序
                      
                      
                        {
                      
                      
                        "age"
                      
                      
                        :
                      
                      
                        23
                      
                      
                        ,
                      
                      
                        "dept"
                      
                      
                        :
                      
                      
                        "sales"
                      
                      
                        ,
                      
                      
                        "gender"
                      
                      
                        :
                      
                      
                        "male"
                      
                      
                        ,
                      
                      
                        "name"
                      
                      
                        :
                      
                      
                        "bob"
                      
                      
                        }
                      
                    
                  
  • cls=None
    指定一個定制的JSONEncoder的子類(例如,重寫了.default()方法用來序列化附加的類型),指定該參數時請使用cls關鍵字參數。如果未指定該參數,則將使用默認的JSONEncoder。

                    
                      
                        >>
                      
                      
                        >
                      
                      
                        class
                      
                      
                        IteratorEncoder
                      
                      
                        (
                      
                      json
                      
                        .
                      
                      encoder
                      
                        .
                      
                      JSONEncoder
                      
                        )
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        def
                      
                      
                        default
                      
                      
                        (
                      
                      self
                      
                        ,
                      
                       o
                      
                        )
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        try
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                                   iterable 
                      
                        =
                      
                      
                        iter
                      
                      
                        (
                      
                      o
                      
                        )
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        except
                      
                       TypeError
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        pass
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        else
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        return
                      
                      
                        list
                      
                      
                        (
                      
                      iterable
                      
                        )
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        return
                      
                      
                        super
                      
                      
                        (
                      
                      
                        )
                      
                      
                        .
                      
                      default
                      
                        (
                      
                      self
                      
                        ,
                      
                       o
                      
                        )
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        >>
                      
                      
                        >
                      
                      
                        def
                      
                      
                        get_nums
                      
                      
                        (
                      
                      n
                      
                        )
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        if
                      
                      
                        not
                      
                      
                        isinstance
                      
                      
                        (
                      
                      n
                      
                        ,
                      
                      
                        int
                      
                      
                        )
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        raise
                      
                       TypeError
                      
                        (
                      
                      
                        'Expected int object'
                      
                      
                        )
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        while
                      
                       n 
                      
                        >
                      
                      
                        0
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        yield
                      
                       n
    
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                               n 
                      
                        -=
                      
                      
                        1
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        >>
                      
                      
                        >
                      
                      
                        print
                      
                      
                        (
                      
                      json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      get_nums
                      
                        (
                      
                      
                        10
                      
                      
                        )
                      
                      
                        ,
                      
                       indent
                      
                        =
                      
                      
                        4
                      
                      
                        ,
                      
                       cls
                      
                        =
                      
                      IteratorEncoder
                      
                        )
                      
                      
                        )
                      
                      
                        [
                      
                      
                        10
                      
                      
                        ,
                      
                      
                        9
                      
                      
                        ,
                      
                      
                        8
                      
                      
                        ,
                      
                      
                        7
                      
                      
                        ,
                      
                      
                        6
                      
                      
                        ,
                      
                      
                        5
                      
                      
                        ,
                      
                      
                        4
                      
                      
                        ,
                      
                      
                        3
                      
                      
                        ,
                      
                      
                        2
                      
                      
                        ,
                      
                      
                        1
                      
                      
                        ]
                      
                    
                  

json.dump

下面演示下該方法的簡單用法:

            
              
                >>
              
              
                >
              
               response 
              
                =
              
              
                {
              
              
                'status'
              
              
                :
              
              
                'success'
              
              
                ,
              
              
                'code'
              
              
                :
              
              
                200
              
              
                ,
              
              
                'data'
              
              
                :
              
              
                {
              
              
                'username'
              
              
                :
              
              
                'bob'
              
              
                ,
              
              
                'user_level'
              
              
                :
              
              
                6
              
              
                ,
              
              
                'nickname'
              
              
                :
              
              
                'playboy'
              
              
                }
              
              
                }
              
              
                >>
              
              
                >
              
              
                with
              
              
                open
              
              
                (
              
              
                'res.json'
              
              
                ,
              
              
                'w'
              
              
                ,
              
               encoding
              
                =
              
              
                'utf-8'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
                .
              
              
                .
              
              
                .
              
                   json
              
                .
              
              dump
              
                (
              
              response
              
                ,
              
               f
              
                ,
              
               indent
              
                =
              
              
                4
              
              
                )
              
              
                .
              
              
                .
              
              
                .
              
              
                >>
              
              
                >
              
               os
              
                .
              
              system
              
                (
              
              
                'cat res.json'
              
              
                )
              
              
                {
              
              
                "status"
              
              
                :
              
              
                "success"
              
              
                ,
              
              
                "code"
              
              
                :
              
              
                200
              
              
                ,
              
              
                "data"
              
              
                :
              
              
                {
              
              
                "username"
              
              
                :
              
              
                "bob"
              
              
                ,
              
              
                "user_level"
              
              
                :
              
              
                6
              
              
                ,
              
              
                "nickname"
              
              
                :
              
              
                "playboy"
              
              
                }
              
              
                }
              
              
                0
              
              
                >>
              
              
                >
              
            
          

json.loads

該方法包含一個位置參數和多個僅限關鍵字參數,分別如下所示:

  • s

  • encoding=None
    該參數已棄用,將會被忽略

  • cls=None
    指定一個定制的JsonDecoder子類,以便實現特定的反序列化需求;

  • object_hook=None
    接受一個可調用對象,用于處理解碼后生成的Python對象中dict類型的值。
    注意,這個處理過程是遞歸進行的,即返回的Python對象內部所有的字典結構都將被這個方法處理

                    
                      
                        >>
                      
                      
                        >
                      
                       emp_info 
                      
                        =
                      
                      
                        {
                      
                      
                        'name'
                      
                      
                        :
                      
                      
                        'bob'
                      
                      
                        ,
                      
                      
                        'age'
                      
                      
                        :
                      
                      
                        25
                      
                      
                        ,
                      
                      
                        'gender'
                      
                      
                        :
                      
                      
                        'Male'
                      
                      
                        }
                      
                      
                        >>
                      
                      
                        >
                      
                      
                        def
                      
                      
                        obj_hook
                      
                      
                        (
                      
                      _dict
                      
                        )
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        return
                      
                      
                        list
                      
                      
                        (
                      
                      _dict
                      
                        .
                      
                      items
                      
                        (
                      
                      
                        )
                      
                      
                        )
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      loads
                      
                        (
                      
                      json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      emp_info
                      
                        )
                      
                      
                        )
                      
                      
                        {
                      
                      
                        'name'
                      
                      
                        :
                      
                      
                        'bob'
                      
                      
                        ,
                      
                      
                        'age'
                      
                      
                        :
                      
                      
                        25
                      
                      
                        ,
                      
                      
                        'gender'
                      
                      
                        :
                      
                      
                        'Male'
                      
                      
                        }
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      loads
                      
                        (
                      
                      json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      emp_info
                      
                        )
                      
                      
                        ,
                      
                       object_hook
                      
                        =
                      
                      obj_hook
                      
                        )
                      
                      
                        [
                      
                      
                        (
                      
                      
                        'name'
                      
                      
                        ,
                      
                      
                        'bob'
                      
                      
                        )
                      
                      
                        ,
                      
                      
                        (
                      
                      
                        'age'
                      
                      
                        ,
                      
                      
                        25
                      
                      
                        )
                      
                      
                        ,
                      
                      
                        (
                      
                      
                        'gender'
                      
                      
                        ,
                      
                      
                        'Male'
                      
                      
                        )
                      
                      
                        ]
                      
                      
                        >>
                      
                      
                        >
                      
                       emp_list 
                      
                        =
                      
                      
                        [
                      
                      
                        25
                      
                      
                        ,
                      
                       emp_info
                      
                        ]
                      
                      
                        >>
                      
                      
                        >
                      
                       emp_list
    
                      
                        [
                      
                      
                        25
                      
                      
                        ,
                      
                      
                        {
                      
                      
                        'name'
                      
                      
                        :
                      
                      
                        'bob'
                      
                      
                        ,
                      
                      
                        'age'
                      
                      
                        :
                      
                      
                        25
                      
                      
                        ,
                      
                      
                        'gender'
                      
                      
                        :
                      
                      
                        'Male'
                      
                      
                        }
                      
                      
                        ]
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      loads
                      
                        (
                      
                      json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      emp_list
                      
                        )
                      
                      
                        ,
                      
                      object_hook
                      
                        =
                      
                      obj_hook
                      
                        )
                      
                      
                        [
                      
                      
                        25
                      
                      
                        ,
                      
                      
                        [
                      
                      
                        (
                      
                      
                        'name'
                      
                      
                        ,
                      
                      
                        'bob'
                      
                      
                        )
                      
                      
                        ,
                      
                      
                        (
                      
                      
                        'age'
                      
                      
                        ,
                      
                      
                        25
                      
                      
                        )
                      
                      
                        ,
                      
                      
                        (
                      
                      
                        'gender'
                      
                      
                        ,
                      
                      
                        'Male'
                      
                      
                        )
                      
                      
                        ]
                      
                      
                        ]
                      
                      
                        >>
                      
                      
                        >
                      
                       emp_d 
                      
                        =
                      
                      
                        [
                      
                      
                        25
                      
                      
                        ,
                      
                      
                        {
                      
                      
                        'name'
                      
                      
                        :
                      
                      
                        'bob'
                      
                      
                        ,
                      
                      
                        'age'
                      
                      
                        :
                      
                      
                        25
                      
                      
                        ,
                      
                      
                        'gender'
                      
                      
                        :
                      
                      
                        'Male'
                      
                      
                        ,
                      
                      
                        'emp_info'
                      
                      
                        :
                      
                      
                        {
                      
                      
                        'count'
                      
                      
                        :
                      
                      
                        9
                      
                      
                        ,
                      
                      
                        'total_salary'
                      
                      
                        :
                      
                      
                        120000
                      
                      
                        }
                      
                      
                        }
                      
                      
                        ]
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      loads
                      
                        (
                      
                      json
                      
                        .
                      
                      dumps
                      
                        (
                      
                      emp_d
                      
                        )
                      
                      
                        ,
                      
                      object_hook
                      
                        =
                      
                      obj_hook
                      
                        )
                      
                      
                        [
                      
                      
                        25
                      
                      
                        ,
                      
                      
                        [
                      
                      
                        (
                      
                      
                        'name'
                      
                      
                        ,
                      
                      
                        'bob'
                      
                      
                        )
                      
                      
                        ,
                      
                      
                        (
                      
                      
                        'age'
                      
                      
                        ,
                      
                      
                        25
                      
                      
                        )
                      
                      
                        ,
                      
                      
                        (
                      
                      
                        'gender'
                      
                      
                        ,
                      
                      
                        'Male'
                      
                      
                        )
                      
                      
                        ,
                      
                      
                        (
                      
                      
                        'emp_info'
                      
                      
                        ,
                      
                      
                        [
                      
                      
                        (
                      
                      
                        'count'
                      
                      
                        ,
                      
                      
                        9
                      
                      
                        )
                      
                      
                        ,
                      
                      
                        (
                      
                      
                        'total_salary'
                      
                      
                        ,
                      
                      
                        120000
                      
                      
                        )
                      
                      
                        ]
                      
                      
                        )
                      
                      
                        ]
                      
                      
                        ]
                      
                    
                  
  • parse_float=None
    用于處理解碼后的Python對象中的float類型的值。

                    
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      loads
                      
                        (
                      
                      
                        '[23.5, 43.32, 5.934]'
                      
                      
                        ,
                      
                       parse_float
                      
                        =
                      
                      
                        lambda
                      
                       x
                      
                        :
                      
                      
                        int
                      
                      
                        (
                      
                      x
                      
                        )
                      
                      
                        )
                      
                      
                        # 將解碼后的所有的float類型的值轉成int類型
                      
                      
                        [
                      
                      
                        23
                      
                      
                        ,
                      
                      
                        43
                      
                      
                        ,
                      
                      
                        5
                      
                      
                        ]
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      loads
                      
                        (
                      
                      
                        '[23.5, 43.32, 5.934]'
                      
                      
                        ,
                      
                       parse_float
                      
                        =
                      
                      
                        lambda
                      
                       x
                      
                        :
                      
                      
                        str
                      
                      
                        (
                      
                      x
                      
                        )
                      
                      
                        )
                      
                      
                        # 將解碼后的所有的float類型的值轉成str類型
                      
                      
                        [
                      
                      
                        '23.5'
                      
                      
                        ,
                      
                      
                        '43.32'
                      
                      
                        ,
                      
                      
                        '5.934'
                      
                      
                        ]
                      
                    
                  
  • parse_constant=None
    接受一個可調用對象,用于解碼時對Infinity、-Infinity、NaN或其他非法的Json數值的處理。

                    
                      
                        >>
                      
                      
                        >
                      
                      
                        def
                      
                      
                        parse_cons
                      
                      
                        (
                      
                      cons
                      
                        )
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        if
                      
                       cons 
                      
                        ==
                      
                      
                        'Infinity'
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        return
                      
                      
                        100000000
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        elif
                      
                       cons 
                      
                        ==
                      
                      
                        '-Infinity'
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        return
                      
                      
                        -
                      
                      
                        100000000
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        elif
                      
                       cons 
                      
                        ==
                      
                      
                        'NaN'
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        return
                      
                      
                        None
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        else
                      
                      
                        :
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        raise
                      
                       Value
                      
                        (
                      
                      f
                      
                        "Can't convert this value {cons}"
                      
                      
                        )
                      
                      
                        .
                      
                      
                        .
                      
                      
                        .
                      
                      
                        >>
                      
                      
                        >
                      
                       json
                      
                        .
                      
                      loads
                      
                        (
                      
                      
                        '[Infinity, -Infinity, NaN]'
                      
                      
                        ,
                      
                       parse_constant
                      
                        =
                      
                      parse_cons
                      
                        )
                      
                      
                        [
                      
                      
                        100000000
                      
                      
                        ,
                      
                      
                        -
                      
                      
                        100000000
                      
                      
                        ,
                      
                      
                        None
                      
                      
                        ]
                      
                    
                  
  • object_parse_hook=None
    如果指定了該參數并且設置為一個可調用對象,那么Json對象將被解碼成一個元素為二元組的列表,二元組的兩個元素分別為Json對象中的鍵值對的鍵和值,并且列表中元素的順序與Json對象中鍵值對的順序一致。

            
              
                >>
              
              
                >
              
               emp_info 
              
                =
              
              
                {
              
              
                'name'
              
              
                :
              
              
                'bob'
              
              
                ,
              
              
                'age'
              
              
                :
              
              
                23
              
              
                ,
              
              
                'dept'
              
              
                :
              
              
                'sales'
              
              
                ,
              
              
                'gender'
              
              
                :
              
              
                'male'
              
              
                }
              
              
                >>
              
              
                >
              
               json
              
                .
              
              loads
              
                (
              
              json
              
                .
              
              dumps
              
                (
              
              emp_info
              
                )
              
              
                ,
              
               object_pairs_hook
              
                =
              
              
                str
              
              
                )
              
              
                "[('name', 'bob'), ('age', 23), ('dept', 'sales'), ('gender', 'male')]"
              
              
                >>
              
              
                >
              
              
                from
              
               collections 
              
                import
              
               OrderedDict

              
                >>
              
              
                >
              
               json
              
                .
              
              loads
              
                (
              
              json
              
                .
              
              dumps
              
                (
              
              emp_info
              
                )
              
              
                ,
              
               object_pairs_hook
              
                =
              
              OrderedDict
              
                )
              
              
OrderedDict
              
                (
              
              
                [
              
              
                (
              
              
                'name'
              
              
                ,
              
              
                'bob'
              
              
                )
              
              
                ,
              
              
                (
              
              
                'age'
              
              
                ,
              
              
                23
              
              
                )
              
              
                ,
              
              
                (
              
              
                'dept'
              
              
                ,
              
              
                'sales'
              
              
                )
              
              
                ,
              
              
                (
              
              
                'gender'
              
              
                ,
              
              
                'male'
              
              
                )
              
              
                ]
              
              
                )
              
            
          

json.load

下面演示下該方法的簡單用法:

            
              
                >>
              
              
                >
              
              
                with
              
              
                open
              
              
                (
              
              
                'res.json'
              
              
                ,
              
               encoding
              
                =
              
              
                'utf-8'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
                .
              
              
                .
              
              
                .
              
                   json
              
                .
              
              load
              
                (
              
              f
              
                )
              
              
                .
              
              
                .
              
              
                .
              
              
                {
              
              
                'status'
              
              
                :
              
              
                'success'
              
              
                ,
              
              
                'code'
              
              
                :
              
              
                200
              
              
                ,
              
              
                'data'
              
              
                :
              
              
                {
              
              
                'username'
              
              
                :
              
              
                'bob'
              
              
                ,
              
              
                'user_level'
              
              
                :
              
              
                6
              
              
                ,
              
              
                'nickname'
              
              
                :
              
              
                'playboy'
              
              
                }
              
              
                }
              
            
          

轉載:https://blog.csdn.net/swinfans/article/details/86501555


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 婷婷在线免费视频 | 激情在线观看视频 | 九九热精品视频在线播放 | 赛车总动员2在线观看 | 亚洲狠狠婷婷综合久久久久网站 | 国产第一页精品 | 九九热视频免费观看 | 久久日本精品99久久久 | 97色在线观看免费视频 | 国产激情影院 | 日韩视频在线观看一区 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 亚洲午夜天堂 | 天天做天天爱夜夜爽女人爽宅 | 一区二区三区欧美在线 | 黄色大全网站 | 欧美日韩亚洲国产一区二区综合 | 亚洲精品字幕一区二区三区 | 一级毛片高清大全免费观看 | 日韩黄色片 | 欧美在线不卡 | 国产91一区二这在线播放 | 特黄特黄aaaa级毛片免费看 | 久久精品香蕉 | 欧美成人天天综合在线视色 | 久久社区| 天天干天天谢 | 精品国产一区二区三区香蕉事 | 欧美一区二区三区综合色视频 | 2022国内精品免费福利视频 | 五月在线视频 | 国产午夜精品一区二区三区嫩草 | 欧美成人在线免费视频 | 久久婷婷丁香七月色综合 | 国产欧美亚洲精品第一区 | 91国自产精品中文字幕亚洲 | 久久国产精品国产精品 | 中日韩欧美在线观看 | 国产桃花视频 | 免费毛片网 | 特级毛片aaaa级毛片免费 |