【Python深入浅出㉝】Python3中JSON的奇妙之旅:从入门到精通

目录

  • 一、JSON 初相识
  • 二、Python3 的 json 模块探秘
    • (一)编码:Python 对象转 JSON
    • (二)解码:JSON 转 Python 对象
  • 三、常用函数深度剖析
    • (一)编码函数 dumps 与 dump
    • (二)解码函数 loads 与 load
  • 四、数据类型转换大揭秘
    • (一)Python 到 JSON 的华丽变身
    • (二)JSON 到 Python 的完美回归
  • 五、实战演练:解决实际问题
    • (一)文件操作实战
    • (二)API 数据交互实战
  • 六、常见错误及解决方案
    • (一)数据格式错误
    • (二)解析错误
    • (三)编码问题
  • 七、总结与展望


一、JSON 初相识

JSON,即 JavaScript Object Notation,是一种轻量级的数据交换格式 。它基于 JavaScript 编程语言的一个子集,采用完全独立于语言的文本格式来存储和表示数据,简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。其不仅易于人阅读和编写,同时也易于机器解析和生成,在网络传输中能有效提升效率。

JSON 的语法结构十分简洁,主要由两种结构构成:

  • 对象:由花括号{}括起来的键值对集合,键与值之间用冒号:分隔,不同键值对之间用逗号,分隔。例如:{“name”: “张三”, “age”: 20} ,这里"name"和"age"是键,"张三"和20分别是对应的值。
  • 数组:由方括号[]括起来的值的有序列表,数组中的值可以是任意 JSON 数据类型,不同值之间用逗号,分隔。例如:[“apple”, “banana”, “cherry”] ,这是一个包含三个字符串的数组。

由于 JSON 具有轻量级、易读易解析、语言无关等特性,在众多领域都有着广泛应用。在前后端数据交互中,JSON 是主流的数据格式。当我们在浏览器中访问一个网站,前端页面向服务器发送请求获取数据,服务器处理请求后,通常会将数据以 JSON 格式返回给前端。例如,一个获取用户信息的接口,服务器返回的 JSON 数据可能如下:

{
    "user_id": 123,
    "username": "example_user",
    "email": "example@example.com"
}

前端通过 JavaScript 的JSON.parse()方法将接收到的 JSON 字符串解析为 JavaScript 对象,从而方便地操作和展示数据。在配置文件方面,许多应用程序和框架都选择使用 JSON 来存储配置信息。以一个简单的 Web 服务器配置为例,配置文件config.json内容如下:

{
    "host": "127.0.0.1",
    "port": 8080,
    "database": {
        "host": "127.0.0.1",
        "port": 3306,
        "username": "root",
        "password": "password"
    }
}

程序在启动时读取这个 JSON 配置文件,获取相关配置信息,以正确地初始化和运行。

二、Python3 的 json 模块探秘

在 Python3 中,处理 JSON 数据非常方便,这得益于其标准库中的json模块 。json模块提供了一系列函数,使得我们能够轻松地在 Python 数据类型和 JSON 格式之间进行转换,实现数据的编码与解码操作。

(一)编码:Python 对象转 JSON

编码,即将 Python 对象转换为 JSON 格式的字符串,主要使用json.dumps()函数 。该函数的基本语法如下:

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)

其中,obj是要编码的 Python 对象,它可以是字典、列表、字符串、数字、布尔值或None等。例如,将一个 Python 字典编码为 JSON 字符串:

import json

data = {
    "name": "李四",
    "age": 25,
    "is_student": True
}
json_str = json.dumps(data)
print(json_str)

输出结果为:

{"name": "\u674e\u56db", "age": 25, "is_student": true}

这里可以看到,默认情况下ensure_ascii参数为True,中文字符被转义成了 Unicode 编码。若希望直接显示中文字符,可将ensure_ascii设为False:

json_str = json.dumps(data, ensure_ascii=False)
print(json_str)

输出:

{"name": "李四", "age": 25, "is_student": true}

indent参数则用于格式化输出,使 JSON 字符串更加易读。当indent为一个正整数时,会按照该数值进行缩进排版:

json_str = json.dumps(data, ensure_ascii=False, indent=4)
print(json_str)

输出:

{
    "name": "李四",
    "age": 25,
    "is_student": true
}

(二)解码:JSON 转 Python 对象

解码与编码相反,是将 JSON 格式的字符串转换为 Python 对象,使用json.loads()函数 ,语法为:

json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

其中,s是要解码的 JSON 字符串。例如,将上述编码后的 JSON 字符串解码回 Python 字典:

import json

json_str = '{"name": "李四", "age": 25, "is_student": true}'
data = json.loads(json_str)
print(data)
print(data["name"])

输出:

{'name': '李四', 'age': 25, 'is_student': True}
李四

通过这种方式,我们可以方便地从 JSON 数据中提取所需信息,进行后续的处理和分析 。在实际应用中,无论是从网络请求获取的数据,还是从文件中读取的配置信息,只要是 JSON 格式,都能利用json模块的这些函数进行高效处理,极大地提高了开发效率。

三、常用函数深度剖析

(一)编码函数 dumps 与 dump

在 Python 的json模块中,dumps和dump函数都用于将 Python 对象编码为 JSON 格式 ,但它们在使用方式和功能上存在一些差异。

dumps函数主要用于将 Python 对象转换为 JSON 格式的字符串,其基本语法为

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) 

其中,obj是要编码的 Python 对象。例如,将一个包含列表和字典的复杂 Python 对象进行编码:

import json

data = {
    "students": [
        {"name": "张三", "age": 20, "scores": {"math": 90, "english": 85}},
        {"name": "李四", "age": 21, "scores": {"math": 88, "english": 92}}
    ]
}
json_str = json.dumps(data, ensure_ascii=False, indent=4)
print(json_str)

上述代码中,ensure_ascii=False确保中文字符正常显示,indent=4使生成的 JSON 字符串具有良好的缩进格式,便于阅读。输出结果如下:

{
    "students": [
        {
            "name": "张三",
            "age": 20,
            "scores": {
                "math": 90,
                "english": 85
            }
        },
        {
            "name": "李四",
            "age": 21,
            "scores": {
                "math": 88,
                "english": 92
            }
        }
    ]
}

dump函数则是将 Python 对象编码为 JSON 格式后,直接写入到文件或类文件对象中 ,语法为

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) 

这里多了一个fp参数,即文件对象。例如,将上述data对象写入名为students.json的文件中:

import json

data = {
    "students": [
        {"name": "张三", "age": 20, "scores": {"math": 90, "english": 85}},
        {"name": "李四", "age": 21, "scores": {"math": 88, "english": 92}}
    ]
}
with open('students.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=4)

执行这段代码后,在当前目录下会生成一个students.json文件,文件内容为格式化后的 JSON 数据 。dumps函数适用于需要将 JSON 数据在内存中进行传递、处理或展示的场景;而dump函数更侧重于将数据持久化存储到文件中,方便后续读取和使用 。

(二)解码函数 loads 与 load

loads和load函数用于将 JSON 数据解码为 Python 对象 ,它们的功能类似,但作用对象不同。

loads函数用于将 JSON 格式的字符串解码为 Python 对象,语法是

json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) 

其中s是包含 JSON 数据的字符串。例如,将一个 JSON 字符串解码为 Python 字典:

import json

json_str = '{"name": "王五", "age": 22, "is_graduate": false}'
data = json.loads(json_str)
print(data)
print(data["name"])

输出结果为:

{'name': '王五', 'age': 22, 'is_graduate': False}
王五

load函数从文件或类文件对象中读取 JSON 数据并解码为 Python 对象 ,语法为

json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) 

fp是文件对象。假设我们有一个config.json文件,内容如下:

{
    "host": "127.0.0.1",
    "port": 8080,
    "database": {
        "host": "127.0.0.1",
        "port": 3306,
        "username": "root",
        "password": "password"
    }
}

使用load函数读取该文件内容并转换为 Python 字典的代码如下:

import json

with open('config.json', 'r', encoding='utf-8') as f:
    data = json.load(f)
print(data)
print(data["database"]["username"])

运行结果为:
{'host': '127.0.0.1', 'port': 8080, 'database': {'host': '127.0.0.1', 'port': 3306, 'username': 'root', 'password': 'password'}}
root

通过load函数,我们能够轻松地从文件中读取 JSON 格式的配置信息,为程序的初始化和运行提供必要的参数 。在实际应用中,根据数据来源是字符串还是文件,合理选择loads和load函数,能够高效地完成 JSON 数据的解码工作,满足不同的业务需求。

四、数据类型转换大揭秘

(一)Python 到 JSON 的华丽变身

在 Python 中,不同的数据类型可以通过json模块转换为 JSON 格式,这个过程就像是一场神奇的变身。

  • 字典:Python 中的字典是一种非常常用的数据类型,它可以很方便地转换为 JSON 对象。例如:
import json

python_dict = {
    "name": "王五",
    "age": 30,
    "hobbies": ["reading", "swimming"]
}
json_str = json.dumps(python_dict, ensure_ascii=False)
print(json_str)

输出结果为:

{"name": "王五", "age": 30, "hobbies": ["reading", "swimming"]}

可以看到,字典中的键值对被直接转换为 JSON 对象中的键值对,中文字符在ensure_ascii=False的设置下正常显示 。

  • 列表:列表同样能轻松转换为 JSON 数组。假设我们有一个包含不同数据类型的列表:
python_list = [1, "apple", 3.14, True]
json_str = json.dumps(python_list)
print(json_str)

输出:

[1, "apple", 3.14, true]

列表中的元素按照顺序被转换为 JSON 数组中的元素 。

  • 元组:元组在转换为 JSON 时,会被当作列表处理。例如:
python_tuple = (10, "banana", False)
json_str = json.dumps(python_tuple)
print(json_str)

输出:

[10, "banana", false]

虽然元组在 Python 中是不可变的,但在转换为 JSON 时,其元素被放入一个 JSON 数组中 。

在这个转换过程中,需要注意的是,JSON 对数据类型有一定的限制 。Python 中的None会被转换为 JSON 中的null;布尔值True和False分别转换为true和false;而对于一些特殊的 Python 数据类型,如datetime类型,直接转换会报错。若要转换datetime类型的数据,需要先将其转换为字符串等 JSON 支持的类型 。例如:

import json
from datetime import datetime

now = datetime.now()
# 直接转换会报错
# json.dumps(now)  
# 转换为字符串后再转换
now_str = now.strftime("%Y-%m-%d %H:%M:%S")
data = {"time": now_str}
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)

输出:

{"time": "2024-08-05 16:30:00"}

通过这种方式,我们可以将各种 Python 数据类型成功转换为 JSON 格式,以满足不同场景下的数据传输和存储需求 。

(二)JSON 到 Python 的完美回归

JSON 数据转换回 Python 对应的数据类型,就像是完成了一场旅行后的回归 。这个过程主要使用json.loads()函数,它能将 JSON 格式的字符串解析为 Python 对象 。

假设我们有一个 JSON 格式的字符串,代表一个人的信息:

json_str = '{"name": "赵六", "age": 28, "is_married": false}'

使用json.loads()函数将其转换为 Python 字典:

import json

data = json.loads(json_str)
print(data)
print(data["name"])

输出:

{'name': '赵六', 'age': 28, 'is_married': False}
赵六

可以看到,JSON 字符串中的键值对被准确地转换为 Python 字典中的键值对,false被转换为 Python 中的False 。

当 JSON 数据是一个数组时,json.loads()会将其转换为 Python 列表 。例如:

json_str = '["apple", "banana", "cherry"]'

转换代码如下:
import json

fruits = json.loads(json_str)
print(fruits)
print(fruits[0])

输出:

['apple', 'banana', 'cherry']
apple

JSON 数组成功地转换为 Python 列表,并且可以通过索引访问列表中的元素 。

在进行 JSON 到 Python 的数据类型转换时,也需要注意一些细节 。如果 JSON 数据格式不正确,比如缺少引号、括号不匹配等,调用json.loads()会抛出json.JSONDecodeError异常 。因此,在实际应用中,通常需要对 JSON 数据进行有效性检查和异常处理 。例如:

import json

invalid_json = '{"name": "Tom", "age": 25, "city": "New York" # 这里缺少一个右括号}'
try:
    data = json.loads(invalid_json)
except json.JSONDecodeError as e:
    print(f"解析JSON失败: {e}")

输出:

解析JSON失败: Expecting ',' delimiter: line 1 column 39 (char 38)

通过异常处理,我们可以确保程序在遇到错误的 JSON 数据时不会崩溃,而是能够给出友好的错误提示,提高程序的稳定性和可靠性 。

五、实战演练:解决实际问题

(一)文件操作实战

在实际开发中,经常需要将数据以 JSON 格式存储到文件中,或者从文件中读取 JSON 数据进行处理。以下是使用 Python 的json模块进行 JSON 文件读写的实战示例 ,同时还会涉及文件编码和异常处理。

假设我们有一个包含用户信息的 Python 字典,需要将其保存为 JSON 文件:

import json

user_data = {
    "username": "user123",
    "email": "user123@example.com",
    "age": 30,
    "interests": ["reading", "traveling", "sports"]
}

try:
    with open('user_info.json', 'w', encoding='utf-8') as f:
        json.dump(user_data, f, ensure_ascii=False, indent=4)
    print("数据已成功写入user_info.json文件")
except Exception as e:
    print(f"写入文件时发生错误: {e}")

在这段代码中,使用open()函数以写入模式’w’打开文件user_info.json,并指定编码为’utf-8’ ,以确保中文字符能正确保存 。json.dump()函数将user_data字典写入文件,ensure_ascii=False保证中文字符正常显示,indent=4使生成的 JSON 文件具有良好的缩进格式 。如果在写入过程中发生任何异常,except块会捕获并打印错误信息 。

接下来,演示如何从这个 JSON 文件中读取数据:

import json

try:
    with open('user_info.json', 'r', encoding='utf-8') as f:
        data = json.load(f)
    print("读取到的数据:")
    print(data)
    print(f"用户名: {data['username']}")
    print(f"年龄: {data['age']}")
except FileNotFoundError:
    print("文件未找到")
except json.JSONDecodeError as e:
    print(f"解析JSON文件时出错: {e}")
except Exception as e:
    print(f"发生其他错误: {e}")

这里使用open()函数以读取模式’r’打开文件,json.load()函数将文件内容解析为 Python 字典 。通过不同的except块分别处理文件未找到(FileNotFoundError)、JSON 解析错误(json.JSONDecodeError)以及其他可能发生的异常 。如果读取和解析成功,会打印出读取到的数据以及特定的用户信息 。通过这样的实战操作,我们能够熟练掌握在文件操作中使用json模块,确保数据的可靠存储和读取 。

(二)API 数据交互实战

在现代 Web 开发中,与 API 进行数据交互是非常常见的任务,而 JSON 是 API 数据传输的主要格式之一 。下面以调用 GitHub API 获取 Python 仓库信息为例,展示如何解析和处理 JSON 数据 。

首先,需要安装requests库,用于发送 HTTP 请求获取 API 数据 。可以使用以下命令进行安装:

pip install requests

然后,编写代码调用 API 并处理返回的 JSON 数据:

import requests

# 发送请求获取API数据
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
response = requests.get(url)

if response.status_code == 200:
    # 将响应内容解析为JSON格式
    data = response.json()
    
    # 提取总仓库数
    total_count = data['total_count']
    print(f"总Python仓库数: {total_count}")
    
    # 提取排名前5的仓库信息
    repositories = data['items'][:5]
    for repo in repositories:
        print(f"仓库名称: {repo['name']}")
        print(f"仓库所有者: {repo['owner']['login']}")
        print(f"仓库星数: {repo['stargazers_count']}")
        print(f"仓库URL: {repo['html_url']}")
        print("-" * 50)
else:
    print(f"请求失败,状态码: {response.status_code}")

在这段代码中,使用requests.get()函数向 GitHub API 发送请求,获取所有 Python 仓库信息,并按星数排序 。如果请求成功(状态码为 200),通过response.json()将响应内容解析为 Python 字典 。接着,从解析后的数据中提取总仓库数和排名前 5 的仓库信息,包括仓库名称、所有者、星数和 URL 等 。如果请求失败,打印出错误的状态码 。通过这个实战案例,我们可以看到如何在 Python 中与 API 进行交互,获取 JSON 数据,并进行有效的解析和处理,以满足实际业务需求 。

六、常见错误及解决方案

在使用 Python3 的json模块进行数据处理时,难免会遇到一些错误。了解这些常见错误及其解决方案,能够帮助我们更高效地编写代码,确保程序的稳定性。

(一)数据格式错误

当 JSON 数据格式不符合规范时,就会出现数据格式错误。例如,JSON 字符串中的引号不匹配、括号不完整或者键值对之间缺少逗号等。比如:

import json

# 错误的JSON字符串,缺少一个双引号
json_str = '{"name": "Tom", "age": 25, "city": "New York"}'
try:
    data = json.loads(json_str)
except json.JSONDecodeError as e:
    print(f"解析JSON失败: {e}")

输出:

解析JSON失败: Expecting ',' delimiter: line 1 column 30 (char 29)

解决方法是仔细检查 JSON 数据,确保其格式正确。可以使用在线 JSON 验证工具,如jsonlint.com ,将 JSON 数据粘贴进去进行验证,工具会指出错误的位置和原因,帮助我们快速修复。

(二)解析错误

在使用json.loads()或json.load()函数解析 JSON 数据时,如果数据格式不正确或者数据类型不匹配,就会引发解析错误 。例如,将一个非 JSON 格式的字符串当作 JSON 数据进行解析:

import json

# 非JSON格式的字符串
not_json_str = "This is not JSON data"
try:
    data = json.loads(not_json_str)
except json.JSONDecodeError as e:
    print(f"解析JSON失败: {e}")

输出:

解析JSON失败: Expecting value: line 1 column 1 (char 0)

为了避免这种错误,在解析之前,最好先对数据进行有效性检查 。可以使用try - except语句捕获json.JSONDecodeError异常,在except块中进行相应的错误处理,如打印错误信息、记录日志或者返回默认值等,确保程序不会因为解析错误而崩溃。

(三)编码问题

如果 JSON 数据中包含非 ASCII 字符,在编码或解码过程中可能会出现编码问题 。例如,在将 Python 对象编码为 JSON 字符串时,默认情况下ensure_ascii参数为True,这会导致非 ASCII 字符被转义为 Unicode 编码 。

import json

data = {"name": "王五"}
json_str = json.dumps(data)
print(json_str)

输出:

{"name": "\u738b\u4e94"}

若要直接显示中文字符,可将ensure_ascii设为False:

json_str = json.dumps(data, ensure_ascii=False)
print(json_str)

输出:

{"name": "王五"}

在读取 JSON 文件时,如果文件编码与指定的编码不一致,也会出现解码错误 。比如,文件实际编码为utf-8,但在读取时指定为gbk:

import json

try:
    with open('test.json', 'r', encoding='gbk') as f:
        data = json.load(f)
except UnicodeDecodeError as e:
    print(f"解码文件时出错: {e}")

解决此类问题,需要明确 JSON 数据的编码格式,并在编码和解码过程中保持一致 。在读取文件时,要确保指定的编码与文件实际编码相符;在编码 Python 对象为 JSON 字符串时,根据需求合理设置ensure_ascii参数 。

七、总结与展望

JSON 作为一种轻量级的数据交换格式,在 Python3 的编程世界中占据着举足轻重的地位。通过 Python3 的json模块,我们能够轻松实现 Python 数据类型与 JSON 格式之间的高效转换,无论是将复杂的 Python 对象编码为 JSON 字符串用于数据传输,还是从 JSON 数据中解码出 Python 对象进行后续处理,都变得极为便捷 。

在实际应用中,从简单的文件操作,如存储和读取配置信息、用户数据等,到复杂的 API 数据交互,JSON 都发挥着关键作用 。掌握json模块的常用函数,如dumps、dump、loads、load,以及理解数据类型转换的规则,能够帮助我们解决各种实际问题 。同时,对常见错误的排查和解决能力,也是我们在使用 JSON 过程中不可或缺的技能 。

随着数据驱动的应用越来越广泛,JSON 的应用场景也将不断拓展 。未来,希望大家在掌握基础用法的基础上,深入探索json模块的高级特性,如自定义编码器和解码器,以满足更加复杂的业务需求 。同时,在处理大规模 JSON 数据时,思考如何优化性能和内存使用,不断提升自己在数据处理领域的能力 。相信通过不断的学习和实践,你将在 JSON 和 Python3 的结合应用中,创造出更多有价值的成果 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/968292.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Word成功接入DeepSeek详细步骤

原理 原理是利用Word的VBA宏,写代码接入API。无需下载额外插件。 步骤一、注册硅基流动 硅基流动统一登录 注册这个是为了有一个api调用的api_key,有一些免费的额度可以使用。大概就是这个公司提供token,我们使用这个公司的模型调用deepsee…

【Ubuntu VScode Remote SSH 问题解决】Resolver error: Error: XHR failed

1. 问题描述 VScode使用remote ssh 远程服务器,报错类似: [12:06:01.219] Downloading VS Code server locally... [12:06:01.310] Resolver error: Error: XHR failedat k.onerror (vscode-file://vscode-app/private/var/folders/g1/cvs2rnpx60qc3b4…

系统思考—双环学习

前几天,一个企业高管向我提到:“我们调整了N次方案,市场策略、团队激励、管理制度,能改的全改了,怎么还是不见起色?” 这让我想到典型的单环学习,简单来说就是:发现问题 → 采取行动…

2.11寒假

今天复习了深搜和广搜然后做了作业中的一个题目。 解析&#xff1a;外层 for 循环&#xff1a;for (int i 1; i < n; i)&#xff0c;循环变量 i 从 1 递增到 n&#xff0c;表示要依次将数字 1 到 n 分配到数组 a 中。内层 for 循环&#xff1a;for (int j 1; j < 2; j)…

使用 AlexNet 实现图片分类 | PyTorch 深度学习实战

前一篇文章&#xff0c;CNN 卷积神经网络处理图片任务 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于 强化学习必修课&#xff1a;引领人工智能新时代【梗直哥瞿炜】 使用 AlexNet 实现图片分类…

基于进化式大语言模型的下一代漏洞挖掘范式:智能对抗与自适应攻防体系

摘要 本文提出了一种基于进化式大语言模型(Evolutionary LLM)的智能漏洞挖掘框架,突破了传统静态分析的局限,构建了具备对抗性思维的动态攻防体系。通过引入深度强化学习与多模态感知机制,实现了漏洞挖掘过程的自适应进化,在RCE、SQLi、XXE等关键漏洞类型的检测中达到97…

python自动化测试之Pytest框架之YAML详解以及Parametrize数据驱动!

一、YAML详解 YAML是一种数据类型&#xff0c;它能够和JSON数据相互转化&#xff0c;它本身也是有很多数据类型可以满足我们接口 的参数类型&#xff0c;扩展名可以是.yml或.yaml 作用&#xff1a; 1.全局配置文件 基础路径&#xff0c;数据库信息&#xff0c;账号信息&…

SQLMesh系列教程-2:SQLMesh入门项目实战(上篇)

假设你已经了解SQLMesh是什么&#xff0c;以及其他应用场景。如果没有&#xff0c;我建议你先阅读《SQLMesh系列教程-1&#xff1a;数据工程师的高效利器-SQLMesh》。 在本文中&#xff0c;我们将完成一个小项目或教程&#xff0c;以帮助你开始使用SQLMesh。你可以选择一步一步…

人工智能与低代码如何重新定义企业数字化转型?

引言&#xff1a;数字化转型的挑战与机遇 在全球化和信息化的浪潮中&#xff0c;数字化转型已经成为企业保持竞争力和创新能力的必经之路。然而&#xff0c;尽管“数字化”听上去是一个充满未来感的词汇&#xff0c;落地的过程却往往充满困难。 首先&#xff0c;传统开发方式…

使用云效解决docker官方镜像拉取不到的问题

目录 前言原文地址测试jenkins构建结果:后续使用说明 前言 最近经常出现docker镜像进行拉取不了&#xff0c;流水线挂掉的问题&#xff0c;看到一个解决方案: 《借助阿里个人版镜像仓库云效实现全免费同步docker官方镜像到国内》 原文地址 https://developer.aliyun.com/artic…

R语言LCMM多维度潜在类别模型流行病学研究:LCA、MM方法分析纵向数据

全文代码数据&#xff1a;https://tecdat.cn/?p39710 在数据分析领域&#xff0c;当我们面对一组数据时&#xff0c;通常会有已知的分组情况&#xff0c;比如不同的治疗组、性别组或种族组等&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 然而&#xff0c;…

java项目之基于用户兴趣的影视推荐系统设计与实现源码(ssm+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的基于用户兴趣的影视推荐系统设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于用户…

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 0基础…

vue2 多页面pdf预览

使用pdfjs-dist预览pdf&#xff0c;实现预加载&#xff0c;滚动条翻页。pdfjs的版本很重要&#xff0c;换了好多版本&#xff0c;终于有一个能用的 node 20.18.1 "pdfjs-dist": "^2.2.228", vue页面代码如下 <template><div v-loading"loa…

堆排序

目录 堆排序&#xff08;不稳定&#xff09;&#xff1a; 代码实现&#xff1a; 思路分析&#xff1a; 总结&#xff1a; 堆排序&#xff08;不稳定&#xff09;&#xff1a; 如果想要一段数据从小到大进行排序&#xff0c;则要先建立大根堆&#xff0c;因为这样每次堆顶上都能…

【C++】多态原理剖析

目录 1.虚表指针与虚表 2.多态原理剖析 1.虚表指针与虚表 &#x1f36a;类的大小计算规则 一个类的大小&#xff0c;实际就是该类中成员变量之和&#xff0c;需要注意内存对齐空类&#xff1a;编译器给空类一个字节来唯一标识这个类的对象 对于下面的Base类&#xff0c;它的…

【Git】完美解决git push报错403

remote: Permission to xx.git denied to xx. fatal: unable to access https://github.com/xx/xx.git/: The requested URL returned error: 403出现这个就是因为你的&#xff08;personal access tokens &#xff09;PAT过期了 删掉旧的token 生成一个新的 mac系统 在mac的…

初窥强大,AI识别技术实现图像转文字(OCR技术)

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据、人工智能领域创作者。目前从事python全栈、爬虫和人工智能等相关工作&#xff0c;主要擅长领域有&#xff1a;python…

黑马Redis详细笔记(实战篇---短信登录)

目录 一.短信登录 1.1 导入项目 1.2 Session 实现短信登录 1.3 集群的 Session 共享问题 1.4 基于 Redis 实现共享 Session 登录 一.短信登录 1.1 导入项目 数据库准备 -- 创建用户表 CREATE TABLE user (id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,phone …

逻辑回归不能解决非线性问题,而svm可以解决

逻辑回归和支持向量机&#xff08;SVM&#xff09;是两种常用的分类算法&#xff0c;它们在处理数据时有一些不同的特点&#xff0c;特别是在面对非线性问题时。 1. 逻辑回归 逻辑回归本质上是一个线性分类模型。它的目的是寻找一个最适合数据的直线&#xff08;或超平面&…