zh
English
Español
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Indonesia
Polski JSON 是 JavaScript Object Notation 的缩写。它不仅轻便,而且易于人类读写。同样,机器也能简单地解析和生成 JSON。对于任何 Python 开发人员来说,在处理来自 API、配置文件或其他存储信息源的内容时,解析都是至关重要的。本文将向您介绍使用 Python 模块解析 JSON 的基础知识,包括如何使用 json.dump python 保存内容。
JSON 结构以键值对形式呈现细节。下面是一个对象的基本示例:
{
"name": "Alice",
"age": 30,
"is_student": false,
"courses": ["Math", "Science"]
}
这个 python json 解析示例包含常见的字符串、数字、布尔和数组。熟悉了这种结构,在 Python 中工作就容易多了。
通过使用 Python 内置模块实现 Python 解析 json 字符串非常简单。该模块包括 json.loads() 和 json.load() 等方法,前者用于从字符串中读取信息,后者用于从文件中读取信息。相反,json.dumps() 和 json.dump Python 则分别用于将信息写入字符串和文件。
让我们看看如何读取 JSON 数据,接下来我们将讨论这个问题。
如果要在 python 中读取 json,则使用 json.loads() 解析字符串并将其转换为 Python 对象:
import json
json_string = '{"name": "Alice", "age": 30, "is_student": false, "courses": ["Math", "Science"]}'
data = json.loads(json_string)
print(data)
输出:
要从文件中提取信息,请使用以下方法:json.load() 并在 python 中打开一个 json 文件:
import json
with open('data.json', 'r') as file:
data = json.load(file)
print(data)
输出:
在编写之前,您通常需要读取或加载现有信息,这就是 python 加载 json 文件方法的用武之地。一旦正确加载了信息,就可以对其进行操作,并以各种格式写回。
要将信息写入字符串,请使用 json.dumps Python 方法:
import json
data = {
"name": "Alice",
"age": 30,
"is_student": False,
"courses": ["Math", "Science"]
}
json_string = json.dumps(data)
print(json_string)
输出:
要写入该文件的详细信息,请使用 json.dump Python 方法:
import json
data = {
"name": "Alice",
"age": 30,
"is_student": False,
"courses": ["Math", "Science"]
}
with open('data.json', 'w') as file:
json.dump(data, file)
在处理更复杂的信息结构时,嵌套对象很常见,它可以轻松处理这些嵌套结构。
import json
nested_json_string = '''
{
"name": "Alice",
"age": 30,
"is_student": false,
"courses": ["Math", "Science"],
"address": {
"street": "123 Main St",
"city": "Wonderland"
}
}
'''
data = json.loads(nested_json_string)
print(data['address']['city'])
输出:
该语言无法自动将所有自定义对象转换为 JSON。在这种情况下,您需要创建一个自定义编码器。
import json
class Student:
def __init__(self, name, age, is_student):
self.name = name
self.age = age
self.is_student = is_student
class StudentEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Student):
return obj.__dict__
return super().default(obj)
student = Student("Alice", 30, False)
json_string = json.dumps(student, cls=StudentEncoder)
print(json_string)
输出:
要反序列化为自定义对象,需要实现一个知道如何处理它们的自定义解码器。
import json
class Student:
def __init__(self, name, age, is_student):
self.name = name
self.age = age
self.is_student = is_student
def student_decoder(dct):
return Student(dct['name'], dct['age'], dct['is_student'])
json_string = '{"name": "Alice", "age": 30, "is_student": false}'
student = json.loads(json_string, object_hook=student_decoder)
print(student.name)
输出:
处理数据细节可能会导致一些常见错误,尤其是在解析、生成或访问结构化内容时。使用可靠的 python json 解析器有助于更高效地识别和修复这些问题。下面是一些最常见的错误:
解析 json 文件时常见的错误是遇到无效格式。它要求在键和字符串值周围加上双引号,并正确嵌套大括号和小括号。
import json
invalid_json_string = "{'name': 'Alice', 'age': 30, 'is_student': False}"
try:
data = json.loads(invalid_json_string)
except json.JSONDecodeError as e:
print(f"Invalid JSON format: {e}")
输出:
有时,内容并不包含您期望的所有键。使用 get() 方法可以安全地处理缺失的键,方法是返回默认值而不是引发错误。
import json
json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)
is_student = data.get('is_student', False)
print(is_student)import json
json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)
is_student = data.get('is_student', False)
print(is_student)
使用 pdb 模块设置断点并调试解析代码。
import json
import pdb
json_string = '{"name": "Alice", "age": 30, "is_student": false}'
pdb.set_trace()
data = json.loads(json_string)
print(data)
网络搜刮通常涉及从服务中检索内容,并返回所获得的信息。下面是一个利用请求库和端点 https://httpbin.org/anything 的示例。
开始之前,请检查您是否已安装请求软件包:
pip install requests
在处理结构化内容时,可以使用请求库来简化工作。只需通过 requests.get(url) 发出 GET 请求和 URL。然后,就可以使用 response.json() 对响应进行解析。这样,就可以轻松访问特定信息,如标题、用户代理、来源或请求 URL,并根据需要将其打印出来。
该代码包含强大的错误处理功能;当解码错误发生时,它会捕获 json.JSONDecodeError,而当特定密钥缺失时,它会捕获 KeyError,从而确保程序不会因 "无数据 "而崩溃。这种代码的健壮性使它能够完美地处理实际的网络刮擦任务。
import requests
import json
url = 'https://httpbin.org/anything'
response = requests.get(url)
try:
data = response.json()
# 从 JSON 响应中提取特定数据
headers = data['headers']
user_agent = headers.get('User-Agent', 'N/A')
origin = data.get('origin', 'N/A')
url = data.get('url', 'N/A')
print(f"User Agent: {user_agent}")
print(f"Origin: {origin}")
print(f"URL: {url}")
except json.JSONDecodeError:
print("Error decoding JSON response")
except KeyError as e:
print(f"Key error: {e} not found in the JSON response")
每个开发人员都必须知道如何用 python 解析 json 文件。有了本手册重点介绍的模块和最佳方法,你就能快速读取、编写和调试。这意味着要定期测试你的代码,并使用正确的工具和最新的功能来提高性能。本指南重点介绍在 python 中解析 json 数据,帮助你高效掌握这些任务。
在进行网络刮擦时,解析变得至关重要,因为网络 API 的内容通常是这种格式。熟练地处理和操作这些内容,可以让您高效地从各种来源中提取有价值的信息。
对于使用网络应用程序接口、配置文件或外部资源的开发人员来说,解析是一项关键技能。无论是从字符串、文件中读取信息,还是写入结构化输出或处理嵌套和自定义对象,都可以通过 Python 内置模块来简化信息处理。开发人员可以解锁 json.load()、json.loads()、json.dump()、json.dumps() Pythons 方法,学习如何处理常见问题、实现自定义编码器或解码器,并为信息交互量身定制稳健可靠的应用程序。由于这种格式是交换信息的网络标准,因此这些技能在刮削、操作内容和通过 API 集成多种服务时非常有价值。使用简单的 python 代码读取 json 文件,使任何项目都能用 python 解析 json 文件,而 json.dump python 则能有效地保存资料。
评论: 0