如何用 Python 解析 JSON - 简单步骤

评论: 0

JSON 是 JavaScript Object Notation 的缩写。它不仅轻便,而且易于人类读写。同样,机器也能简单地解析和生成 JSON。对于任何 Python 开发人员来说,在处理来自 API、配置文件或其他存储信息源的内容时,解析都是至关重要的。本文将向您介绍使用 Python 模块解析 JSON 的基础知识,包括如何使用 json.dump python 保存内容。

了解 JSON 及其结构

JSON 结构以键值对形式呈现细节。下面是一个对象的基本示例:


{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"]
}

这个 python json 解析示例包含常见的字符串、数字、布尔和数组。熟悉了这种结构,在 Python 中工作就容易多了。

用 Python 与 JSON 交互

通过使用 Python 内置模块实现 Python 解析 json 字符串非常简单。该模块包括 json.loads() 和 json.load() 等方法,前者用于从字符串中读取信息,后者用于从文件中读取信息。相反,json.dumps() 和 json.dump Python 则分别用于将信息写入字符串和文件。

读取 JSON 数据

让我们看看如何读取 JSON 数据,接下来我们将讨论这个问题。

从字符串读取 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)

输出:

1.png

从文件中提取 JSON

要从文件中提取信息,请使用以下方法:json.load() 并在 python 中打开一个 json 文件:


import json

with open('data.json', 'r') as file:
    data = json.load(file)

print(data)

输出:

2.png

编写 JSON 数据

在编写之前,您通常需要读取或加载现有信息,这就是 python 加载 json 文件方法的用武之地。一旦正确加载了信息,就可以对其进行操作,并以各种格式写回。

将 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)

输出:

3.png

将 JSON 写入文件

要写入该文件的详细信息,请使用 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)

管理高级嵌套 JSON

在处理更复杂的信息结构时,嵌套对象很常见,它可以轻松处理这些嵌套结构。


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'])

输出:

4.png

自定义 JSON 编码器

该语言无法自动将所有自定义对象转换为 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)

输出:

5.png

自定义 JSON 解码器

要反序列化为自定义对象,需要实现一个知道如何处理它们的自定义解码器。


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)

输出:

6.png

处理常见问题

处理数据细节可能会导致一些常见错误,尤其是在解析、生成或访问结构化内容时。使用可靠的 python json 解析器有助于更高效地识别和修复这些问题。下面是一些最常见的错误:

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}")

输出:

7.png

处理丢失的钥匙

有时,内容并不包含您期望的所有键。使用 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)

调试 JSON 解析问题

使用 pdb 模块设置断点并调试解析代码。


import json
import pdb

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
pdb.set_trace()
data = json.loads(json_string)
print(data)

网络搜刮中的 JSON 处理实例

网络搜刮通常涉及从服务中检索内容,并返回所获得的信息。下面是一个利用请求库和端点 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")

8.png

每个开发人员都必须知道如何用 python 解析 json 文件。有了本手册重点介绍的模块和最佳方法,你就能快速读取、编写和调试。这意味着要定期测试你的代码,并使用正确的工具和最新的功能来提高性能。本指南重点介绍在 python 中解析 json 数据,帮助你高效掌握这些任务。

在进行网络刮擦时,解析变得至关重要,因为网络 API 的内容通常是这种格式。熟练地处理和操作这些内容,可以让您高效地从各种来源中提取有价值的信息。

结论

对于使用网络应用程序接口、配置文件或外部资源的开发人员来说,解析是一项关键技能。无论是从字符串、文件中读取信息,还是写入结构化输出或处理嵌套和自定义对象,都可以通过 Python 内置模块来简化信息处理。开发人员可以解锁 json.load()、json.loads()、json.dump()、json.dumps() Pythons 方法,学习如何处理常见问题、实现自定义编码器或解码器,并为信息交互量身定制稳健可靠的应用程序。由于这种格式是交换信息的网络标准,因此这些技能在刮削、操作内容和通过 API 集成多种服务时非常有价值。使用简单的 python 代码读取 json 文件,使任何项目都能用 python 解析 json 文件,而 json.dump python 则能有效地保存资料。

评论:

0 评论