JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,在各种应用场景中扮演着重要角色。Python 中处理 JSON 数据非常便捷,主要通过内置的 json 模块来实现。
本文将详细介绍如何使用 Python 进行 JSON 数据的操作,包括基本的序列化与反序列化、美化输出、处理特殊字符、自定义排序、优化性能、处理复杂数据类型以及批量文件读写等内容。
1.快速入门:认识 JSON
JSON 是一种轻量级的数据交换格式。它基于 JavaScript 的一个子集,但独立于语言和平台。Python 中处理 JSON 数据非常方便,主要通过 json 模块完成。 示例代码:
import json
data = { "name" : "Alice" , "age" : 30 , "is_student" : False , "hobbies" : [ "reading" , "traveling" , "coding" ] }
json_string = json. dumps( data)
print ( json_string)
parsed_data = json. loads( json_string)
print ( parsed_data)
1.2 .3 .4 .5 .6 .7 .8 .9 .10 .11 .12 .13 .14 .15 .16 .17 .
{ "name" : "Alice" , "age" : 30 , "is_student" : false, "hobbies" : [ "reading" , "traveling" , "coding" ] }
{ 'name' : 'Alice' , 'age' : 30 , 'is_student' : False , 'hobbies' : [ 'reading' , 'traveling' , 'coding' ] }
1.2 .
2.美化输出:让 JSON 更好看
直接打印出来的 JSON 字符串可能不够美观,尤其是在调试时。使用 json.dumps() 方法的 indent 参数可以生成易读的格式。 示例代码:
pretty_json = json. dumps( data, indent= 4 )
print ( pretty_json)
1.2 .
{ "name" : "Alice" , "age" : 30 , "is_student" : false, "hobbies" : [ "reading" , "traveling" , "coding" ] }
1.2 .3 .4 .5 .6 .7 .8 .9 .10 .
3.处理特殊字符:避免编码问题
在处理包含特殊字符或非 ASCII 字符的 JSON 数据时,可能会遇到编码问题。设置 ensure_ascii=False 可以让非 ASCII 字符正确显示。 示例代码:
special_data = { "message" : "你好,世界!" , "emoji" : "😊" }
json_string = json. dumps( special_data, ensure_ascii= False )
print ( json_string)
1.2 .3 .4 .5 .6 .7 .
{ "message" : "你好,世界!" , "emoji" : "😊" }
1 .
4.自定义排序:按照特定顺序排序键值
默认情况下,json.dumps() 会按照字典的键值顺序输出 JSON。如果想自定义排序规则,可以通过传递 sort_keys=True 参数实现。 示例代码:
sorted_json = json. dumps( data, indent= 4 , sort_keys= True )
print ( sorted_json)
1.2 .
{ "age" : 30 , "hobbies" : [ "reading" , "traveling" , "coding" ] , "is_student" : false, "name" : "Alice" }
1.2 .3 .4 .5 .6 .7 .8 .9 .10 .
5.高效序列化:优化性能
在处理大量数据时,序列化和反序列化的性能至关重要。json 模块提供了 ensure_ascii 和 separators 等参数来优化性能。 示例代码:
optimized_json = json. dumps( data, separators= ( ',' , ':' ) )
print ( optimized_json)
1.2 .3 .
{ "name" : "Alice" , "age" : 30 , "is_student" : false, "hobbies" : [ "reading" , "traveling" , "coding" ] }
1 .
6.自定义序列化:处理复杂数据类型
Python 中的某些数据类型(如 datetime 对象)默认无法被 json.dumps() 序列化。这时可以自定义序列化函数来处理这些复杂数据类型。 示例代码:
from datetime
import datetime
def custom_serializer ( obj) :
if isinstance ( obj, datetime) :
return obj. isoformat( )
raise TypeError( "Type not serializable" )
complex_data = { "name" : "Alice" , "birthdate" : datetime( 1990 , 1 , 1 ) ,
"is_student" : False , "hobbies" : [ "reading" , "traveling" , "coding" ] }
json_string = json. dumps( complex_data, default= custom_serializer)
print ( json_string)
1.2 .3 .4 .5 .6 .7 .8 .9 .10 .11 .12 .13 .14 .15 .16 .17 .18 .19 .
{ "name" : "Alice" , "birthdate" : "1990-01-01T00:00:00" , "is_student" : false,
"hobbies" : [ "reading" , "traveling" , "coding" ] }
1 .
7.批量处理:优化文件读写
在处理大型 JSON 文件时,逐行读取和写入可以显著提高效率。json 模块提供了 load() 和 dump() 方法来处理文件。 示例代码:
with open ( 'data.json' , 'w' ) as file :
json. dump( data, file , indent= 4 )
with open ( 'data.json' , 'r' ) as file :
loaded_data = json. load( file )
print ( loaded_data)
1.2 .3 .4 .5 .6 .7 .8 .
{ 'name' : 'Alice' , 'age' : 30 , 'is_student' : False , 'hobbies' : [ 'reading' , 'traveling' , 'coding' ] }
1 .
实战案例:处理天气 API 数据
假设我们需要从一个天气 API 获取当前天气信息,并将其保存到本地文件中 示例代码:
import requests
import json
url = "https://api.openweathermap.org/data/2.5/weather?q=Beijing&appid=YOUR_API_KEY"
response = requests. get( url)
if response. status_code == 200 :
weather_data = response. json( )
with open ( 'weather.json' , 'w' ) as file :
json. dump( weather_data, file , indent= 4 )
else :
print ( "Error:" , response. status_code)
with open ( 'weather.json' , 'r' ) as file :
loaded_weather_data = json. load( file )
print ( loaded_weather_data)
1.2 .3 .4 .5 .6 .7 .8 .9 .10 .11 .12 .13 .14 .15 .16 .17 .18 .19 .20 .21 .22 .23 .24 .
{ "coord" : { "lon" : 116.4074 , "lat" : 39.9042 } ,
"weather" : [ { "id" : 802 , "main" : "Clouds" , "description" : "scattered clouds" , "icon" : "03n" } ] ,
. . . }
1.2 .3 .4 .5 .6 .7 .8 .9 .10 .11 .12 .13 .14 .15 .
在这个案例中,我们首先发送了一个 GET 请求来获取北京的天气数据。然后将返回的 JSON 数据保存到本地文件 weather.json 中,并通过 json.load() 方法读取文件内容。这样不仅可以方便地查看数据,还可以用于后续的数据处理和分析 本文介绍了 Python 中处理 JSON 数据的各种技巧,包括快速入门、美化输出、处理特殊字符、自定义排序、性能优化、处理复杂数据类型及批量文件读写等。通过这些技巧,可以更加高效地管理和操作 JSON 数据。
总结
最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!
文末福利
最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!
① Python所有方向的学习路线图,清楚各个方向要学什么东西 ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析 ③ 100多个Python实战案例,学习不再是只会理论 ④ 华为出品独家Python漫画教程,手机也能学习
可以扫描下方二维码领取【保证100%免费 】