溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python怎么讀寫JSON文件

發(fā)布時(shí)間:2022-04-12 15:21:53 來源:億速云 閱讀:348 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“Python怎么讀寫JSON文件”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

    JSON

    JSON 起源

    JSON 全稱 JavaScript Object Notation 。是處理對(duì)象文字語(yǔ)法的 JavaScript 編程語(yǔ)言的一個(gè)子集。JSON 早已成為與語(yǔ)言無關(guān)的語(yǔ)言,并作為自己的標(biāo)準(zhǔn)存在。

    JSON 樣例

    {
    	 "data":[
    	  {
    	    "id": "1",
    	    "name": "A同學(xué)",
    	    "state": "1",
    	    "createTime": "2020-01-21"
    	  },
    	  {
    	    "id": "2",
    	    "name": "B同學(xué)",
    	    "state": "1",
    	    "createTime": "2020-01-21"
    	  },
    	  {
    	    "id": "3",
    	    "name": "C同學(xué)",
    	    "state": "0",
    	    "createTime": "2020-01-21"
    	  }
    	]
    }

    Python 原生支持 JSON

    Python 帶有一個(gè)內(nèi)置包 json,用于對(duì) JSON 數(shù)據(jù)進(jìn)行編碼和解碼。

    Python怎么讀寫JSON文件

    引用方式。

    import json

    JSON 編碼的過程通常稱為序列化。該術(shù)語(yǔ)是指將數(shù)據(jù)轉(zhuǎn)換為一系列字節(jié)通過網(wǎng)絡(luò)存儲(chǔ)或傳輸。反序列化是解碼以 JSON 標(biāo)準(zhǔn)存儲(chǔ)或交付的數(shù)據(jù)的交互過程。

    序列化 JSON

    直觀的轉(zhuǎn)換將簡(jiǎn)單的 Python 對(duì)象轉(zhuǎn)換為 JSON。

    PythonJSON
    dictobject
    list,tuplearray
    strstring
    int, long,floatnumber
    Truetrue
    Falsefalse
    Nonenull

    簡(jiǎn)單的序列化示例

    創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)。

    data =   {
    	 "data":[
    	  {
    	    "id": "1",
    	    "name": "A同學(xué)",
    	    "state": "1",
    	    "createTime": "2020-01-21"
    	  },
    	  {
    	    "id": "2",
    	    "name": "B同學(xué)",
    	    "state": "1",
    	    "createTime": "2020-01-21"
    	  },
    	  {
    	    "id": "3",
    	    "name": "C同學(xué)",
    	    "state": "0",
    	    "createTime": "2020-01-21"
    	  }
    	]
    }

    數(shù)據(jù)直接以文本方式保存。

    with open("data_file.json", "w") as f:
        json.dump(data, f)

    數(shù)據(jù)直接以字符串方式使用。

    json_str = json.dumps(data)

    JSON 反序列化

    在 json 庫(kù)中使用 load() 和 oads() 用于將 JSON 編碼數(shù)據(jù)轉(zhuǎn)換為 Python 對(duì)象。

    JSONPython
    objectdict
    arraylist
    stringstr
    number(整數(shù))int
    number(浮點(diǎn)數(shù))float
    trueTrue
    falseFalse
    nullNone

    簡(jiǎn)單的反序列化示例

    讀取寫入json文件的數(shù)據(jù)。

    with open("data_file.json", "r") as read_file:
        data = json.load(read_file)

    字符串?dāng)?shù)據(jù)。

    json_string = """
    {
    	 "data":[
    	  {
    	    "id": "1",
    	    "name": "A同學(xué)",
    	    "state": "1",
    	    "createTime": "2020-01-21"
    	  },
    	  {
    	    "id": "2",
    	    "name": "B同學(xué)",
    	    "state": "1",
    	    "createTime": "2020-01-21"
    	  },
    	  {
    	    "id": "3",
    	    "name": "C同學(xué)",
    	    "state": "0",
    	    "createTime": "2020-01-21"
    	  }
    	]
    }
    """
    data = json.loads(json_string)

    應(yīng)用案例

    通過互聯(lián)網(wǎng)的數(shù)據(jù)抓取解析文本信息。

    # 秦皇島煤炭網(wǎng)微博
    import requests
    from bs4 import BeautifulSoup
    import datetime
    url = "http://news.cqcoal.com/manage/newsaction.do?method:webListPageNewsArchivesByTypeid"
    post_param = {'pageNum':'1','pageSize':'20','jsonStr':'{"typeid":"238"}'}
    return_data = requests.post(url,data =post_param)
    return_data = return_data.content.decode("utf-8")
    
    import json
    for i in json.loads(return_data)["rows"]:
        title = i["title"]
        url = "http://news.cqcoal.com/blank/nc.jsp?mid="+str(i["id"])
        timeStamp=int(i["pubdate"])
        dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
        date = dateArray.strftime("%Y-%m-%d")
        print(title,url,date)

    Python怎么讀寫JSON文件

    編碼和解碼

    自定義數(shù)據(jù)。

    import json
    
    # 基礎(chǔ)的數(shù)字字典
    py_object = {"c": 0, "b": 0, "a": 0}
    
    # JSON 編碼
    json_string = json.dumps(py_object)
    print(json_string)
    print(type(json_string))
    
    {"c": 0, "b": 0, "a": 0}
    <class 'str'>
    
    
    # JSON 解碼
    py_obj = json.loads(json_string)
    
    print(py_obj)
    print(type(py_obj))
    
    {'c': 0, 'b': 0, 'a': 0}
    <class 'dict'>

    如果遇到 TypeError: Object of type SampleClass is not JSON serializable 的錯(cuò)誤就需要自定義編碼和解碼了。

    import json
    
    class Student:
    	def __init__(self, name, roll_no, address):
    		self.name = name
    		self.roll_no = roll_no
    		self.address = address
    
    	def to_json(self):
    		'''
    		將此類的實(shí)例轉(zhuǎn)換為 json
    		'''
    		return json.dumps(self, indent = 4, default=lambda o: o.__dict__)
    
    class Address:
    	def __init__(self, city, street, pin):
    		self.city = city
    		self.street = street
    		self.pin = pin
    		
    address = Address("Bulandshahr", "Adarsh Nagar", "203001")
    student = Student("Raju", 53, address)
    
    # 編碼
    student_json = student.to_json()
    print(student_json)
    print(type(student_json))
    
    {
        "name": "Raju",
        "roll_no": 53,
        "address": {
            "city": "Bulandshahr",
            "street": "Adarsh Nagar",
            "pin": "203001"
        }
    }
    <class 'str'>
    
    # 解碼
    student = json.loads(student_json)
    print(student)
    print(type(student))
    
    {'name': 'Raju', 'roll_no': 53, 'address': {'city': 'Bulandshahr', 'street': 'Adarsh Nagar', 'pin': '203001'}}
    <class 'dict'>

    “Python怎么讀寫JSON文件”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI