当前位置: 首页 > wzjs >正文

双浩建设网站宜家家居官网网上商城

双浩建设网站,宜家家居官网网上商城,qq互联网站备案号,全屏产品网站Python JSON的深度解析:从基础到应用 flyfish 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于一个子集的JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999…

Python JSON的深度解析:从基础到应用

flyfish

什么是JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于一个子集的JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999。JSON采用完全独立于语言的文本格式,但也使用类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使得JSON成为理想的数据交换语言。

Python中的json库和Flask中的jsonify

  • Python json:这是Python标准库的一部分,提供了将Python对象转换为JSON格式字符串(序列化)以及将JSON格式字符串转换回Python对象(反序列化)的功能。主要方法包括dumps()用于序列化,loads()用于反序列化。

  • Flask中的jsonify:这是Flask框架提供的一个便捷函数,用来生成JSON响应。它不仅将数据转换为JSON格式,还会设置HTTP响应的Content-Type为application/json,非常适合构建API服务时返回JSON数据给客户端。

JSON的例子

{"name": "张三","age": 30,"is_student": false,"courses": ["数学", "物理"],"address": {"city": "北京","zip_code": "100084"}
}

如何组成JSON及解析

  • 组成JSON:在Python中使用json库来创建JSON字符串非常简单。例如:
import jsondata = {'name': '李四','age': 25,'is_student': True,'courses': ['化学', '生物'],'address': {'city': '上海','zip_code': '200000'}
}json_str = json.dumps(data, ensure_ascii=False)
print(json_str)
  • 解析JSON:同样地,可以使用json.loads()来解析JSON字符串回到Python对象:
parsed_data = json.loads(json_str)
print(parsed_data)

使用Python的json库来解析

import json# 假设这是从网络获取的复杂JSON字符串
json_str = '''
{"school_name": "实验中学","location": {"city": "济南","address": "济南经十路"},"students": [{"name": "张三", "age": 15, "grades": {"数学": 93, "英语": 88}},{"name": "李四", "age": 14, "grades": {"数学": 97, "英语": 92}},{"name": "王五", "age": 16, "grades": {"数学": 90, "英语": 85}}]
}
'''# 解析JSON字符串
data = json.loads(json_str)# 打印学校名称
print("学校名称:", data['school_name'])# 遍历并打印学生信息
for student in data['students']:print(f"姓名: {student['name']}, 年龄: {student['age']}")for subject, grade in student['grades'].items():print(f"  {subject}: {grade}")# 修改某个学生的成绩并重新转换为JSON字符串
data['students'][0]['grades']['数学'] = 95
updated_json_str = json.dumps(data, ensure_ascii=False, indent=4)
print("\n更新后的JSON字符串:")
print(updated_json_str)

常用函数

  • json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

    • 将Python对象写入文件(或类似文件的对象)。
    • ensure_ascii: 如果为False, 则允许非ASCII字符直接输出而不是转义序列。
    • indent: 控制缩进以美化输出。
  • json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

    • 将Python对象转换为JSON格式的字符串。
  • json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

    • 从文件(或类似文件的对象)读取JSON数据并解码成Python对象。
  • json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

    • 将JSON格式的字符串解码成Python对象。

显示汉字

在处理包含中文字符的JSON时,确保ensure_ascii参数设置为False非常重要。这样,Python不会将非ASCII字符转换为Unicode转义序列,而是直接输出原始字符。例如:

data = {'name': '李华','message': '你好,世界!'
}# 确保ensure_ascii=False来正确显示中文
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)

这将输出实际的中文字符而非其Unicode编码形式。同样,在使用json.dump()写入文件时也应设置ensure_ascii=False,以确保文件中保存的是原始中文字符。

在Flask中使用jsonify来构建返回JSON格式数据的API

jsonify是Flask提供的一个便捷函数,用于生成JSON响应,并自动设置HTTP响应的Content-Type为application/json。创建一个简单的Flask应用,该应用有一个API端点,它返回一些用户信息作为JSON格式的数据。

安装Flask

首先,确保你已经安装了Flask。如果还没有安装,可以使用pip来安装:

pip install Flask
创建Flask应用

下面是一个完整的示例代码,展示了如何使用jsonify函数来返回JSON数据。

from flask import Flask, jsonify, requestapp = Flask(__name__)# 模拟的用户数据
users = [{"id": 1, "name": "张三", "age": 30},{"id": 2, "name": "李四", "age": 25},{"id": 3, "name": "王五", "age": 28}
]# 获取所有用户的API
@app.route('/api/users', methods=['GET'])
def get_users():return jsonify(users)# 根据ID获取单个用户的API
@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):user = next((user for user in users if user["id"] == user_id), None)if user is not None:return jsonify(user)else:return jsonify({"error": "User not found"}), 404# 添加新用户的API
@app.route('/api/users', methods=['POST'])
def add_user():new_user = request.get_json()if not new_user or 'name' not in new_user or 'age' not in new_user:return jsonify({"error": "Invalid input"}), 400# 生成一个新的用户IDnew_user['id'] = max(user['id'] for user in users) + 1users.append(new_user)return jsonify(new_user), 201# 更新用户的API
@app.route('/api/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):update_data = request.get_json()user = next((user for user in users if user["id"] == user_id), None)if user is None:return jsonify({"error": "User not found"}), 404user.update(update_data)return jsonify(user)# 删除用户的API
@app.route('/api/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):global usersinitial_length = len(users)users = [user for user in users if user["id"] != user_id]if len(users) < initial_length:return jsonify({"message": "User deleted"}), 200else:return jsonify({"error": "User not found"}), 404if __name__ == '__main__':app.run(debug=True)

运行应用

保存上述代码到一个文件(例如app.py),然后在终端中运行:

python app.py

默认情况下,Flask应用会在http://127.0.0.1:5000/上运行。

测试API

你可以使用curl命令或者Postman等工具来测试这些API端点。以下是一些示例请求:

  • 获取所有用户

    curl -X GET http://127.0.0.1:5000/api/users
    
  • 根据ID获取单个用户

    curl -X GET http://127.0.0.1:5000/api/users/1
    
  • 添加新用户

    curl -X POST -H "Content-Type: application/json" -d '{"name": "赵六", "age": 22}' http://127.0.0.1:5000/api/users
    
  • 更新用户信息

    curl -X PUT -H "Content-Type: application/json" -d '{"age": 31}' http://127.0.0.1:5000/api/users/1
    
  • 删除用户

    curl -X DELETE http://127.0.0.1:5000/api/users/1
    

Python 原始类型与 JSON 类型之间的对应关系

当客户端(如浏览器、移动应用)需要从服务器获取数据时,通常会请求 JSON 格式的数据。服务器端将 Python 对象序列化为 JSON 字符串,并发送给客户端,需要将 Python 数据结构(如字典、列表等)转换为 JSON 字符串。
在 Python 中,json 模块提供了 dumps()loads() 方法来进行序列化(Python 到 JSON)和反序列化(JSON 到 Python)。

Python 类型JSON 类型备注
dictobject字典会被转换为 JSON 对象
list, tuplearray列表和元组都会被转换为 JSON 数组
strstring字符串保持不变
int, floatnumber整数和浮点数都被转换为 JSON 数字
TruetruePython 的布尔值 True 转换为 JSON 的 true
FalsefalsePython 的布尔值 False 转换为 JSON 的 false
NonenullPython 的 None 转换为 JSON 的 null
示例代码

以下是一些具体的示例,展示了如何将 Python 数据结构转换为 JSON 字符串:

import json# Python 数据结构
data = {"name": "张三","age": 30,"is_student": False,"courses": ["数学", "物理"],"address": {"city": "北京","zip_code": "100084"},"scores": {"数学": 93, "英语": 88},"active": True,"metadata": None
}# 将 Python 数据结构转换为 JSON 字符串
json_str = json.dumps(data, ensure_ascii=False, indent=4)
print(json_str)# 输出:
# {
#     "name": "张三",
#     "age": 30,
#     "is_student": false,
#     "courses": [
#         "数学",
#         "物理"
#     ],
#     "address": {
#         "city": "北京",
#         "zip_code": "100084"
#     },
#     "scores": {
#         "数学": 93,
#         "英语": 88
#     },
#     "active": true,
#     "metadata": null
# }
注意事项
  • ensure_ascii=False:如果你的数据包含非ASCII字符(如中文),确保设置 ensure_ascii=False,以避免这些字符被转义为 Unicode 编码形式。

  • indent 参数:用于美化输出,指定缩进级别。

自定义序列化:如果遇到无法直接序列化的对象(如自定义类实例),可以使用 default 参数提供一个函数来处理这些情况。

def custom_serializer(obj):if isinstance(obj, datetime.datetime):return obj.isoformat()raise TypeError(f"Type {type(obj)} not serializable")json_str = json.dumps(data, default=custom_serializer)
http://www.dtcms.com/wzjs/575867.html

相关文章:

  • 哪个网站做加盟网站建设技术李京文
  • ih5做自适应网站四川建设考试培训网
  • 制作网站的成本自建站电商外贸
  • 网站建设要考虑的问题哪建设网站
  • 网站建设状况专业网站优化软件
  • 网站是公司域名是个人可以宁波企业自助建站
  • php网站培训班广州企业做网站
  • 网站开发书番禺电商网站建设
  • 夸网站做的好怎么夸中国十大网络公司排行榜
  • 濮阳门户网站开发软件是怎么开发的
  • 这几年做啥网站致富什么是电商?电商怎么做
  • 外贸推广建站公司网站建设 猫云seo
  • 免费商用图片的网站中企动力做网站行吗
  • 智能建站价格wordpress 茶叶模板
  • 网站定位分析是什么网站建设需求模板
  • 怀化招标网站如何做公司网站运营
  • 合作网站开发网站举报电话是多少
  • 友情网站制作什么是软文营销?
  • 外贸网站 站长工具广州网页编辑数量
  • 网站建设技术服务税种分类地产项目网站建设ppt
  • 明薇通网站建设哪家好网站建设服务图片
  • 网络营销招聘海口seo计费
  • 网站源码制作步骤中小企业网站建设公司
  • 2018年网站设计公司莆田室内设计公司排名
  • 网站建设与网站制作济南建设集团网站
  • php网站iis设置网站外链建设原则
  • 杭州建站模板展示深圳网站建设与推广
  • 试用网站cms惠州自适应网站建设
  • 公司网站文章百浪科技做网站怎么样
  • 中卫网站推广制作网站建设中的图片及视频要求