信息发布→ 登录 注册 退出

Python读写JSON文件的操作详解

发布时间:2026-01-11

点击量:
目录
  • JSON
    • JSON 起源
    • JSON 样例
  • Python 原生支持 JSON
    • 序列化 JSON
    • 简单的序列化示例
    • JSON 反序列化
    • 简单的反序列化示例
  • 应用案例
    • 编码和解码

      JSON

      JSON 起源

      JSON 全称 JavaScript Object Notation 。是处理对象文字语法的 JavaScript 编程语言的一个子集。JSON 早已成为与语言无关的语言,并作为自己的标准存在。

      JSON 样例

      {
      	 "data":[
      	  {
      	    "id": "1",
      	    "name": "A同学",
      	    "state": "1",
      	    "createTime": "2025-01-21"
      	  },
      	  {
      	    "id": "2",
      	    "name": "B同学",
      	    "state": "1",
      	    "createTime": "2025-01-21"
      	  },
      	  {
      	    "id": "3",
      	    "name": "C同学",
      	    "state": "0",
      	    "createTime": "2025-01-21"
      	  }
      	]
      }
      

      Python 原生支持 JSON

      Python 带有一个内置包 json,用于对 JSON 数据进行编码和解码。

      引用方式。

      import json
      

      JSON 编码的过程通常称为序列化。该术语是指将数据转换为一系列字节通过网络存储或传输。反序列化是解码以 JSON 标准存储或交付的数据的交互过程。

      序列化 JSON

      直观的转换将简单的 Python 对象转换为 JSON。

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

      简单的序列化示例

      创建一个简单的数据。

      data =   {
      	 "data":[
      	  {
      	    "id": "1",
      	    "name": "A同学",
      	    "state": "1",
      	    "createTime": "2025-01-21"
      	  },
      	  {
      	    "id": "2",
      	    "name": "B同学",
      	    "state": "1",
      	    "createTime": "2025-01-21"
      	  },
      	  {
      	    "id": "3",
      	    "name": "C同学",
      	    "state": "0",
      	    "createTime": "2025-01-21"
      	  }
      	]
      }
      

      数据直接以文本方式保存。

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

      数据直接以字符串方式使用。

      json_str = json.dumps(data)
      

      JSON 反序列化

      在 json 库中使用 load() 和 oads() 用于将 JSON 编码数据转换为 Python 对象。

      JSONPython
      objectdict
      arraylist
      stringstr
      number(整数)int
      number(浮点数)float
      trueTrue
      falseFalse
      nullNone

      简单的反序列化示例

      读取写入json文件的数据。

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

      字符串数据。

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

      应用案例

      通过互联网的数据抓取解析文本信息。

      # 秦皇岛煤炭网微博
      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)
      

      编码和解码

      自定义数据。

      import json
      
      # 基础的数字字典
      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 的错误就需要自定义编码和解码了。

      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):
      		'''
      		将此类的实例转换为 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文件的操作详解的详细内容,更多关于Python读写JSON的资料请关注其它相关文章!

      在线客服
      服务热线

      服务热线

      4008888355

      微信咨询
      二维码
      返回顶部
      ×二维码

      截屏,微信识别二维码

      打开微信

      微信号已复制,请打开微信添加咨询详情!