【第九节】python中xml解析和json编解码
目录
一、Python XML 解析
1.1 什么是XML
1.2 Python 对 XML 的解析方法
1.3 SAX解析xml
1.4 xml.dom解析xml
1.6 ElementTree解析XML
二、Python编解码json
2.1 什么是json
2.2 使用json 库
2.3 使用第三方库Demjson
一、Python XML 解析
1.1 什么是XML
XML,全称为可扩展标记语言(eXtensible Markup Language),是一种用于描述数据的标记语言。XML的设计宗旨是传输和存储数据,强调数据的内容和结构,而非数据的显示方式。
以下是XML的一些关键特点:
1). **自描述性**:XML使用标签来定义数据的结构和意义,这些标签可以由用户根据需要自行定义,因此具有很高的灵活性和扩展性。
2). **平台无关性**:XML的文本格式使其独立于具体的硬件和软件平台,可以在不同的系统之间轻松交换数据。
3). **结构化数据**:XML文档通常遵循一定的层次结构,这使得数据更加有序和易于管理。
4). **元标记语言**:XML是一种元标记语言,这意味着它可以用来创建其他特定领域的标记语言。例如,SVG(可缩放矢量图形)和MathML(数学标记语言)都是基于XML的。
5). **可扩展性**:由于XML的标签是自定义的,因此可以根据需要添加新的标签,而不会影响现有的数据和应用程序。
6). **验证机制**:XML可以通过文档类型定义(DTD)或XML Schema来定义数据的结构和约束,从而确保数据的完整性和有效性。
XML在许多领域都有广泛的应用,包括Web服务、配置文件、数据存储和交换等。它的灵活性和强大的数据描述能力使其成为一种重要的数据处理工具。
1.2 Python 对 XML 的解析方法
在Python中,解析XML文件主要有三种方法:SAX(Simple API for XML)、DOM(Document Object Model)以及ElementTree。每种方法都有其独特的特点和适用场景。
1. **SAX(Simple API for XML)**:
- SAX是一种基于事件驱动的解析方式。
- 在解析XML时,SAX会逐行读取文件,并在识别出特定元素时触发相应的事件。
- 这种方法不需要将整个XML文档加载到内存中,因此适用于处理大型XML文件。
- 由于SAX是只读的,它不支持对XML文档的修改。
2. **DOM(Document Object Model)**:
- DOM解析器会将整个XML文档加载到内存中,并构建一个树状结构的对象模型。
- 这使得用户可以随机访问树中的任何节点,进行查询、修改、删除或添加操作。
- 然而,DOM方法在处理大型XML文件时可能会消耗大量内存。
3. **ElementTree**:
- ElementTree提供了一种轻量级、高效且易于使用的方式来解析和处理XML。
- 它将XML数据表示为一个树状结构,类似于DOM,但更加简洁和高效。
- ElementTree支持对XML文档的读取和写入操作,适用于中等大小的XML文件。
选择哪种解析方法取决于具体需求,例如文件大小、内存限制、是否需要修改XML内容等因素。对于大型文件,SAX可能是更合适的选择;而对于需要频繁修改的中小型文件,ElementTree或DOM可能更为适宜。
1.3 SAX解析xml
Python中使用SAX解析XML文档时,涉及到两个核心组件:解析器和事件处理器。
SAX解析器负责逐行读取XML文档,并在识别出特定元素时向事件处理器发送相应的事件,例如元素的开始和结束。
事件处理器则负责响应这些事件,对传递过来的XML数据进行处理。
SAX解析方式特别适用于以下场景:
1). 处理大型XML文件;
2). 仅需获取文件的部分内容或特定信息;
3). 需要构建自定义对象模型的情况。
在Python中,使用SAX解析XML需要先导入`xml.sax`模块中的`parse`函数,以及`xml.sax.handler`模块中的`ContentHandler`类。
`ContentHandler`类包含多个方法,用于处理不同类型的XML事件:
- `characters(content)`方法:在遇到字符数据时被调用,`content`参数包含这些字符串。
- `startDocument()`方法:在文档开始时被调用。
- `endDocument()`方法:在文档结束时被调用。
- `startElement(name, attrs)`方法:在遇到XML开始标签时被调用,`name`是标签名,`attrs`是属性值的字典。
- `endElement(name)`方法:在遇到XML结束标签时被调用。
此外,`xml.sax`模块还提供了以下方法:
- `make_parser()`方法:创建并返回一个新的解析器对象。
- `parse(xmlfile, contenthandler[, errorhandler])`方法:创建一个SAX解析器并解析指定的XML文件。
- `parseString(xmlstring, contenthandler[, errorhandler])`方法:创建一个XML解析器并解析指定的XML字符串。
这些方法和类构成了Python中使用SAX解析XML的基础框架,开发者可以根据具体需求重写`ContentHandler`类中的方法,以实现对XML数据的定制化处理。
我们实验使用到的 XML 实例文件 movies.xml 内容如下:
<collection shelf="New Arrivals">
<movie title="Enemy Behind"><type>War, Thriller</type><format>DVD</format><year>2003</year><rating>PG</rating><stars>10</stars><description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers"><type>Anime, Science Fiction</type><format>DVD</format><year>1989</year><rating>R</rating><stars>8</stars><description>A schientific fiction</description>
</movie><movie title="Trigun"><type>Anime, Action</type><format>DVD</format><episodes>4</episodes><rating>PG</rating><stars>10</stars><description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar"><type>Comedy</type><format>VHS</format><rating>PG</rating><stars>2</stars><description>Viewable boredom</description>
</movie>
</collection>
解析上面xml的python代码如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-import xml.saxclass MovieHandler( xml.sax.ContentHandler ):def __init__(self):self.CurrentData = ""self.type = ""self.format = ""self.year = ""self.rating = ""self.stars = ""self.description = ""# 元素开始事件处理def startElement(self, tag, attributes):self.CurrentData = tagif tag == "movie":print "*****Movie*****"title = attributes["title"]print "Title:", title# 元素结束事件处理def endElement(self, tag):if self.CurrentData == "type":print "Type:", self.typeelif self.CurrentData == "format":print "Format:", self.formatelif self.CurrentData == "year":print "Year:", self.yearelif self.CurrentData == "rating":print "Rating:", self.ratingelif self.CurrentData == "stars":print "Stars:", self.starselif self.CurrentData == "description":print "Description:", self.descriptionself.CurrentData = ""# 内容事件处理def characters(self, content):if self.CurrentData == "type":self.type = contentelif self.CurrentData == "format":self.format = contentelif self.CurrentData == "year":self.year = contentelif self.CurrentData == "rating":self.rating = contentelif self.CurrentData == "stars":self.stars = contentelif self.CurrentData == "description":self.description = contentif ( __name__ == "__main__"):# 创建一个 XMLReaderparser = xml.sax.make_parser()# turn off namepsacesparser.setFeature(xml.sax.handler.feature_namespaces, 0)# 重写 ContextHandlerHandler = MovieHandler()parser.setContentHandler( Handler )parser.parse("movies.xml")
代码执行结果如下:
*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Year: 2003
Rating: PG
Stars: 10
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Year: 1989
Rating: R
Stars: 8
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Stars: 10
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Stars: 2
Description: Viewable boredom
1.4 xml.dom解析xml
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。
一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。
python中用xml.dom.minidom来解析xml文件,实例如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-from xml.dom.minidom import parse
import xml.dom.minidom# 使用minidom解析器打开 XML 文档
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):print "Root element : %s" % collection.getAttribute("shelf")# 在集合中获取所有电影
movies = collection.getElementsByTagName("movie")# 打印每部电影的详细信息
for movie in movies:print "*****Movie*****"if movie.hasAttribute("title"):print "Title: %s" % movie.getAttribute("title")type = movie.getElementsByTagName('type')[0]print "Type: %s" % type.childNodes[0].dataformat = movie.getElementsByTagName('format')[0]print "Format: %s" % format.childNodes[0].datarating = movie.getElementsByTagName('rating')[0]print "Rating: %s" % rating.childNodes[0].datadescription = movie.getElementsByTagName('description')[0]print "Description: %s" % description.childNodes[0].data
执行结果如下:
Root element : New Arrivals
*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Rating: PG
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Rating: R
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Description: Viewable boredom
1.6 ElementTree解析XML
import xml.etree.ElementTree as ET# 解析XML文件
tree = ET.parse('movies.xml')
root = tree.getroot()# 遍历所有的movie元素
for movie in root.findall('movie'):# 获取movie的属性title = movie.get('title')# 获取子元素的文本内容movie_type = movie.find('type').textformat = movie.find('format').textyear = movie.find('year').text if movie.find('year') is not None else 'N/A'rating = movie.find('rating').textstars = movie.find('stars').textdescription = movie.find('description').text# 打印信息print(f"Title: {title}")print(f"Type: {movie_type}")print(f"Format: {format}")print(f"Year: {year}")print(f"Rating: {rating}")print(f"Stars: {stars}")print(f"Description: {description}")print("-" * 40)
二、Python编解码json
2.1 什么是json
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON 是基于 JavaScript 编程语言的一个子集,但它是独立于语言的文本格式,因此可以在多种编程语言中使用。
### JSON 的结构
JSON 数据格式主要由两种结构组成:
1). **键值对集合**:这通常表现为对象(object),在 JSON 中用花括号 `{}` 表示。每个键值对由一个键和一个值组成,键和值之间用冒号 `:` 分隔,每个键值对之间用逗号 `,` 分隔。例如:
```json
{
"name": "John",
"age": 30,
"city": "New York"
}
```
2). **值的有序列表**:这通常表现为数组(array),在 JSON 中用方括号 `[]` 表示。数组中的每个值之间用逗号 `,` 分隔。例如:
```json
[
"apple",
"banana",
"cherry"
]
```
JSON 支持以下数据类型:
- 字符串(string)
- 数字(number)
- 对象(object)
- 数组(array)
- 布尔值(boolean)
- null
### JSON 的应用
JSON 由于其简洁性和通用性,在现代软件开发中得到了广泛的应用,主要包括以下几个方面:
1). **数据交换**:JSON 常用于不同系统之间的数据交换,特别是在 Web 开发中,前端和后端之间通过 JSON 格式传递数据。
2). **配置文件**:JSON 格式简洁易读,常被用作配置文件的格式,如应用程序的设置文件。
3). **API 响应**:RESTful API 通常使用 JSON 格式返回数据,使得客户端能够轻松解析和处理。
4). **日志记录**:JSON 格式的日志易于解析和查询,因此在日志记录系统中也得到了广泛应用。
5). **存储数据**:虽然 JSON 不是数据库格式,但在某些情况下,它被用于存储结构化数据,尤其是在需要快速读写的场景中。
6). **移动应用**:移动应用开发中,JSON 常用于从服务器获取数据,并在应用中进行展示和处理。
7). **物联网(IoT)**:在物联网设备中,JSON 常用于设备与服务器之间的数据传输。
JSON 的广泛应用得益于其简单、灵活和易于处理的特性,使得它成为现代软件开发中不可或缺的一部分。
2.2 使用json 库
在Python中,处理JSON对象非常简单,因为Python标准库提供了`json`模块,用于编码(序列化)和解码(反序列化)JSON数据。以下是如何使用`json`模块进行JSON编码和解码的示例:
### 编码(序列化)JSON对象
要将Python对象编码为JSON字符串,可以使用`json.dumps()`方法。以下是一个示例:
import json# 定义一个Python对象
data = {"name": "John Doe","age": 30,"city": "New York","is_student": False,"courses": ["Math", "Science", "History"]
}# 将Python对象编码为JSON字符串
json_string = json.dumps(data, indent=4)
print(json_string)
在这个示例中,我们定义了一个Python字典`data`,然后使用`json.dumps()`方法将其编码为JSON字符串。`indent=4`参数用于美化输出,使JSON字符串更易读。
python 原始类型向 json 类型的转化对照表:
### 解码(反序列化)JSON对象
要将JSON字符串解码为Python对象,可以使用`json.loads()`方法。以下是一个示例:
import json# 定义一个JSON字符串
json_string = '''
{"name": "John Doe","age": 30,"city": "New York","is_student": false,"courses": ["Math", "Science", "History"]
}'''# 将JSON字符串解码为Python对象
data = json.loads(json_string)
print(data)
print(type(data)) # 输出: <class 'dict'>
在这个示例中,我们定义了一个JSON字符串`json_string`,然后使用`json.loads()`方法将其解码为Python字典。
json 类型转换到 python 的类型对照表:
### 处理文件中的JSON数据
如果需要从文件中读取JSON数据或将JSON数据写入文件,可以使用`json.load()`和`json.dump()`方法。以下是一个示例:
import json# 写入JSON数据到文件
data = {"name": "John Doe","age": 30,"city": "New York","is_student": False,"courses": ["Math", "Science", "History"]
}with open('data.json', 'w') as file:json.dump(data, file, indent=4)# 从文件中读取JSON数据
with open('data.json', 'r') as file:data = json.load(file)print(data)
在这个示例中,我们首先使用`json.dump()`方法将Python对象`data`写入名为`data.json`的文件中。然后,使用`json.load()`方法从文件中读取JSON数据并将其解码为Python对象。
通过这些方法,你可以轻松地在Python中处理JSON数据。
2.3 使用第三方库Demjson
`demjson` 是一个第三方 Python 模块,提供了对 JSON 数据的编码和解码功能,并且包含了 JSONLint 的格式化及校验功能。以下是如何使用 `demjson` 模块进行 JSON 编码和解码的详细步骤和示例。
### 安装 `demjson`
首先,你需要安装 `demjson` 模块。你可以从源码安装,也可以使用 `pip` 安装。以下是从源码安装的步骤:
$ tar -xvzf demjson-2.2.3.tar.gz
$ cd demjson-2.2.3
$ python setup.py install
或者使用 `pip` 安装:
$ pip install demjson
### 编码 JSON 数据
`demjson` 的 `encode` 函数用于将 Python 对象编码成 JSON 字符串。
#### 语法
demjson.encode(self, obj, nest_level=0)
#### 示例
以下是一个将 Python 列表编码为 JSON 字符串的示例:
#!/usr/bin/python
import demjsondata = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]json_string = demjson.encode(data)
print(json_string)
输出结果为:
[{"a":1,"b":2,"c":3,"d":4,"e":5}]
### 解码 JSON 数据
`demjson` 的 `decode` 函数用于将 JSON 字符串解码为 Python 对象。
#### 语法
demjson.decode(self, txt)
#### 示例
以下是一个将 JSON 字符串解码为 Python 字典的示例:
#!/usr/bin/python
import demjsonjson_string = '{"a":1,"b":2,"c":3,"d":4,"e":5}';data = demjson.decode(json_string)
print(data)
输出结果为:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
### 总结
`demjson` 模块提供了简单易用的方法来处理 JSON 数据。通过 `encode` 和 `decode` 函数,你可以轻松地在 Python 对象和 JSON 字符串之间进行转换。如果你需要更高级的 JSON 处理功能,`demjson` 可能是一个不错的选择。
相关文章:

【第九节】python中xml解析和json编解码
目录 一、Python XML 解析 1.1 什么是XML 1.2 Python 对 XML 的解析方法 1.3 SAX解析xml 1.4 xml.dom解析xml 1.6 ElementTree解析XML 二、Python编解码json 2.1 什么是json 2.2 使用json 库 2.3 使用第三方库Demjson 一、Python XML 解析 1.1 什么是XML XML&#x…...
yolo v8部署到云服务器问题记录
环境安装 1、运行项目报错:no python application found, check your startup logs for errors 在云服务器pytorch版本安装错了,安装了GPU版本,需要安装CPU版本 # CPU only 使用下面这段代码避免出现第二个错误 pip install torch2.3.1 to…...

端口被占用,杀死进程的步骤
一、 查看所有进程占用的端口 在开始-运行-cmd,输入:netstat –ano可以查看所有进程 二、查看占用指定端口的程序 查看被那个端口占用,可以用该命令: 三、使用命令杀死进程 杀死进程,使用命令:...

接口入门(企业常见使用,一分钟搞定版)
目录 1、接口的定义 定义位置 接口内容 2、接口的使用 正常实现接口 接口当做函数参数 匿名实现接口 3、OPPO便签接口具体分析 总结一下: 1、接口的定义 定义位置 可以写在类中,但注意现在接口名字是 类名.接口名 可以单独写在一个文件 接口内…...
深入解析:Cookie 与 Session 的区别及应用场景
引言 在Web开发中,Cookie 和 Session 是两种常用的用户状态管理机制。虽然它们的目标都是在无状态的HTTP协议中维护用户的状态,但它们的工作原理和适用场景却有所不同。在本文中,我们将深入探讨 Cookie 和 Session 的区别,并通过…...
LLM金融文本分类文档说明
Python注意事项: 1,创建虚拟环境: conda create --prefixD:\software\Anaconda3\envs\finance_analysis python3.10.4 conda create -p D:/software/anaconda3/envs/finance_analysis python3.10.4 注释: D:\software\anaconda3\e…...

EI检索,2天录用,3天见刊!截稿在即,这本水刊你还不投吗?
点击关注:关注GZH【欧亚科睿学术】,GET完整版2023JCR分区列表! 🎉 🎉 🎉 🎉 恭喜!这本毕业水刊仅2天录用!3天见刊! 重要时间节点如下 2024-08-03 Sub…...
sql获取过去的小时数
TIMESTAMPDIFF(HOUR, create_time, NOW()) AS pastHours 是一条 SQL 语句的一部分,它使用 TIMESTAMPDIFF 函数来计算两个时间点之间的差异,并将结果标记为 pastHours。 让我们详细解析一下这条语句: TIMESTAMPDIFF 函数: 这个函数用于计算两…...

【Android Studio】彻底卸载
文章目录 卸载程序控制面板卸载安全软件卸载 重启计算机删除文件重启计算机 我们在Android开发时涉及重装时,如果卸载不干净,再次安装是不会正常运行项目的,接下来就让我教你如何删除干净吧。 卸载程序 控制面板卸载 control控制面板一>…...

美术版权可以当做商标使用吗
美术版权与商标的区别及不可混用性分析 在知识产权领域,美术版权和商标权是两个重要的概念,它们各自承载着不同的法律意义和保护范围。 美术版权概述 美术版权,又称著作权,是指著作权人对其创作的美术作品所享有的权利。这些作品…...

控制某些请求不记录日志
说明:由于统一拦截日志请求,导致所有匹配的请求都会打印日志,这里需要控制有些请求执行不打印日志,比如定时每隔几秒执行某些请求。 具体实现如下: 一、自定义注解,如下: /** * Description: …...

Java线程池原理剖析和应用指南
目录 Java线程池详解一、Java线程池简介池化思想池化思想的优点 二、线程池的实现原理分析实现线程池需要考虑哪些问题?线程池的简单使用示例线程池原理的简单图示 三、Executor详解Executor简介Executor框架的继承结构总结ExecutorExecutorService 四、ThreadPoolE…...

ST-LINK烧录MCU
打开ST-LINK软件: 主板断电状态下接入烧录器,烧录器USB连接电脑: 主板上电,点击连接按钮: 点击加载文件: 点击写入按钮,烧录成功后拔掉烧录器,主板重新上电...

Go - 10. * 值类型和指针类型的差异
目录 一.引言 二.接收者类型 三.代码示例 1.指针接收者 2.值接收者 3.运行结果对比 4.代码修改 5.刨根问底 四.总结 一.引言 go 语言中 func (c *Title) 和 func (c Title) 两个方法的传参差一个 * 号,二者的区别是一个是指针类型,一个是值类型…...

waf绕过:网络安全狗绕过
引言: 所有的绕过原理都大致一致,但是并不是所有的绕过都能起到作用,渗透测试主要还是一个猜加试的过程,本文仅供参考 网络攻击或扫描绕过 1.get绕过(未开启cc防护) 网络安全狗的默认防护为,拒…...
Django中的模型小总结:
from django.db import models from django.urls import reverse# 自定义Manager方法 class HighRatingManager(models.Manager):def get_queryset(self):return super().get_queryset().filter(rating1)# CHOICES选项 class Rating(models.IntegerChoices):VERYGOOD 1, Very …...

深入理解 RDMA 的软硬件交互机制
作者:羽京 一、前言 随着数据中心的飞速发展,高性能网络不断挑战着带宽与时延的极限,网卡带宽从过去的 10 Gb/s 、25 Gb/s 到如今的 100 Gb/s、200 Gb/s 再到下一代的 400Gb/s 网卡,其发展速度已经远大于 CPU 发展的速度。 为了…...

轻优图片编辑压缩官网 轻优图片编辑压缩
轻优图片编辑压缩是一个无需安装,可以直接在线压缩图片大小的网站。轻优图片编辑压缩网站可以快速把图片压缩到指定大小。 轻优图片编辑压缩官网网址:www.qingyoubianji.com 浏览器打开 www.qingyoubianji.com 网站,你会看到一个简洁的界面…...

封装el-table 基于element封装可配置JSON表格组件
基于element封装可配置JSON表格组件 话不多说直接贴代码,复制运行即可查看效果 子组件全部代码 <template><div class"custom-table"><el-table:data"tableData"borderstyle"width: 100%"size"mini"max-h…...

Springboot 开发之 Quartz 任务调度框架简介
引言 Quartz Scheduler是一个功能丰富的开源作业调度库,它允许开发人员以灵活的方式创建和管理定时任务。以下是对Quartz Scheduler的详细解析: 官网地址:https://www.quartz-scheduler.org/w3cschool 官方文档:https://www.w3c…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...