JSON详细教程

😊JSON详细教程

    • 🚩JSON简介
    • ☃️JSON语法规则
      • 🔊JSON和JavaScript对象的区别
    • ☃️JSON数据类型
      • 字符串
      • 🔊数字
      • 🔊布尔值
      • 🔊数组
      • 🔊对象
      • 🔊Null
    • ☃️JSON对象
      • 🔊访问JSON对象的值
      • 🔊循环对象
      • 🔊修改JSON对象的值的方法
      • 🔊删除JSON对象属性
    • ☃️JSON数组
      • 🔊访问JSON数组里的值
      • 🔊修改JSON数组里的值
      • 🔊删除JSON数组元素
    • ☃️JSON的使用
      • 🔊JSON.parse()
      • 🔊JSON.stringify()
      • 🔊JSON5
    • 📖总结

😊各位小伙伴们,新文章出炉了!!!



🚩JSON简介

在这里插入图片描述
JSON 是 JavaScript 对象表示法(JavaScript Object Notation)的缩写,它是一种轻量级的数据交换格式(数据交换是指,两设备之间建立连接并互相传递数据的过程)。类似XML,但比XML更流行,它易于阅读和编写,并且易于解析和生成。JSON在Web开发领域有着举足轻重的地位。并且大多数编程语言都支持JSON,一些本身不支持的语言也可以通过集成第三方库使用JSON。

JSON是基于ECMAScript(European Computer Manufactures Association,欧洲计算机协会制定的JS规范)的一个子集,完全采用独立于编程语言的文本格式来存储和表示数据。JSON易于计算机解析和生成,通常用于Web客户端(浏览器)与Web服务器之间传递数据。

JSON与XML相对比,既有优点,也有不足。与XML相同的是:JSON是纯文本,其本身具有“自我描述性(人类可读)”,和XML一样都具有层级结构(值中存在值),都可以被JavaScript进行解析,同时也可以使用AJAX进行传输。与XML不同的是:JSON没有结束标签,语法格式上相对于XML更简洁,且读写速度更快,能够使用内建的JavaScript eval()方法进行解析,省略了保留字。

之所以使用JSON,最主要的原因是JavaScript,JavaScript是Web开发中不可或缺的技术之一,而JSON是基于JavaScript的一个子集,JavaScript默认就支持JSON,JSON被广泛应用于Web开发、移动应用、API接口设计等领域。例如,在前后端交互中,使用JSON作为数据传输格式可以方便地实现数据的序列化和反序列化。



☃️JSON语法规则

JSON中的键值对是由一个键和一个值组成,它们之间用冒号:分割,多个键值对之间用逗号,分割。键必须为字符串类型,值可以是字符串、数字、布尔值、对象、数组或null。键和字符串都必须使用双引号括起来。

语法格式:

key:value
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"name":"学习JSON"

需要注意的是,JSON语法中不能出现单引号和结束分号;,因为它是一种纯数据格式,不是语句。另外,JSON语法还可以使用反斜线\进行转义,用于表示一些特殊字符和字符集。

🔊JSON和JavaScript对象的区别

JSON和JavaScript对象有很多相似之处,比如它们都可以表示键值对形式的数据,都可以通过点运算符访问成员等,但在很多方面也有重要的区别:

  • JSON是一种数据格式,主要用于在不同编程语言之间传输和共享数据;而JavaScript对象则是JavaScript程序中的一个基本概念,用于封装数据和行为。

  • JSON只能包含六种数据类型:字符串、数字、布尔值、数组、对象和null;而JavaScript对象除了这些之外,还可以包含函数和其他类型的值。

  • JSON中的键必须用双引号包裹;而JavaScript对象的键既可以使用单引号,也可以使用双引号或不使用引号。

  • JSON不能包含注释;而JavaScript对象则可以包含注释。

  • JSON是一种纯文本格式,可以直接在网络上传输和存储;而JavaScript对象则需要被序列化成JSON格式才能在网络上传输和存储。



☃️JSON数据类型

字符串

JSON中的字符串需要使用双引号定义(字符串必须使用双引号,不能使用单引号),例如"hello word"字符串中可以包含零个或多个Unicode字符。另外,JSON的字符串中也可以包含一些转义字符。

{
    "name":"John",
    "sex":"男",
    "address":"中国"
}

🔊数字

JSON中的数字既可以是整数,也可以是浮点数。但是,JSON中不能使用八进制和十六进制表示数字,但可以使用eE来表示10的指数。

{
    "number1":1,
    "number2":2,
    "number3":3
}

🔊布尔值

JSON中的布尔值只有两个,即truefalse

{
    "value1":true,
    "value2":false
}

🔊数组

JSON中的数组是一组有序的值的集合,每个值都用逗号分隔,例如:[1, 2, 3]。

{
    "array":[
        {"name":"张三","age":18},
        {"name":"李四","age":19},
        {"name":"王五","age":20}
    ]
}

🔊对象

JSON中的对象是一组键值对的集合,每个键值对都用逗号分隔,值书写在{}中。JSON对象可以包含多个名称/值对。例如:{“name”: “John”, “age”: 30}。

{
    "name":"John",
    "age":18,
    "city":"New York"
}

🔊Null

JSON中的null表示没有任何值。



☃️JSON对象

JSON 对象是由键值对组成的无序集合,键和值使用冒号:分隔,每个键值对之间使用逗号 ,分隔。键必须是字符串类型,值可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null),JSON对象使用在大括号{...}中书写。例如:{"name": "Alice", "age": 25}

实例:

{
    "name":"张三",
    "age":18,
    "sex":"男"
    ...
}

🔊访问JSON对象的值

点运算符(.):如果知道键的名称,可以使用点运算符直接访问对象中的值。语法格式为 对象.键。例如,假设有一个 JSON 对象 person,包含键值对 { "name": "Alice", "age": 25 },可以通过 person.name 来访问 name 的值,通过 person.age 来访问 age 的值。
在这里插入图片描述
运行结果如下
在这里插入图片描述
方括号运算符([ ]):如果不知道键的名称,或者键的名称包含特殊字符,可以使用方括号运算符来访问 JSON 对象中的值。语法格式为 对象[键]。例如,假设有一个 JSON 对象 person,包含键值对 { "name": "Alice", "age": 25 },可以通过 person["name"] 来访问 name 的值,通过 person["age"] 来访问 age 的值。
在这里插入图片描述
运行结果如下
在这里插入图片描述
假设有一个 JSON 对象 person,包含嵌套的键值对:

var person = {
    "name": "Alice",
    "age": 25,
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "country": "USA"
    }
};

要访问嵌套对象中的值,可以使用连续的点运算或方括号运算符。例如,要访问地址的城市,可以使用 person.address.cityperson["address"]["city"]

var city = person.address.city; // "New York"
var city = person["address"]["city"]; // "New York"

运行结果如下
在这里插入图片描述
总之,使用点运算符或方括号运算符,可以根据键的名称或索引值来访问 JSON 对象中的值,无论是在一级还是多级嵌套的情况下。

🔊循环对象

在JavaScript中,有两种主要的方法可以用来循环JSON对象的属性。

可以使用for-in来循环对象的属性

var jsonObject = { "name": "John", "age": 30, "city": "New York" };
for (var key in jsonObject) {
    if (jsonObject.hasOwnProperty(key)) {
        console.log("Key: " + key);
        console.log("Value: " + jsonObject[key]);
    }
}

运行结果如下
在这里插入图片描述
在使用for...in语句时,需要检查对象是否拥有该属性,因为某些内置属性也可能被包含在for…in循环中。如果你只想遍历自己的自定义属性,可以使用hasOwnProperty()方法。

🔊修改JSON对象的值的方法

要修改JSON对象的值,首先需要将JSON字符串转换为JavaScript对象,然后再对其中的属性进行修改。以下是具体的步骤:

1.将JSON字符串转换为JavaScript对象:可以使用JSON.parse()函数将JSON字符串转换为JavaScript对象。

let jsonStr = '{"name":"John", "age":30, "city":"New York"}';
let jsonObj = JSON.parse(jsonStr);

2.修改JavaScript对象的值:可以使用点运算符或方括号运算符来修改JavaScript对象的属性值。

// 使用点运算符
jsonObj.name = 'Mike';

// 使用方括号运算符
jsonObj['age'] = 45;

3.将JavaScript对象转换回JSON字符串:可以使用JSON.stringify()函数将JavaScript对象转换回JSON字符串。

let updatedJsonStr = JSON.stringify(jsonObj);
console.log(updatedJsonStr); // 输出 {"name":"Mike","age":45,"city":"New York"}

运行结果如下
在这里插入图片描述
注意,在使用JSON.parse()JSON.stringify()函数时,需要确保字符串的内容符合JSON规范,否则可能会抛出错误。另外,使用方括号运算符可以更灵活地操作属性,特别是当不确定属性名称或者属性名称来自变量时。

🔊删除JSON对象属性

要删除JSON对象中的某个属性,可以使用JavaScript的delete运算符。

delete jsonObj.age;
//或者使用中括号([])来删除 JSON 对象的属性
delete myObj.sites["age"]

检查该属性是否已被成功删除

console.log(jsonObj.age); // 输出 undefined

运行结果如下
在这里插入图片描述
注意,在使用delete运算符时,如果该属性存在,则会被成功删除并且返回true;如果该属性不存在,则不会报错并且返回false。此外,删除了某属性后,该属性的值变为undefined,但其键仍存在于对象中,只是值为空。因此,如果想彻底删除某个属性,还需要将其从对象中移除。

☃️JSON数组

JSON 数组是有序的值的集合,用方括号 [] 表示,每个值之间使用逗号 , 分隔。值可以是任意类型,包括字符串、数值、布尔值、对象或其他数组。例如:["apple", "banana", "orange"]

实例

{
    "name":"网站",
    "num":3,
    "sites":["google","taobao","baidu"]
}

🔊访问JSON数组里的值

1.索引访问:JSON 数组中的值按照索引顺序排列,索引从 0 开始。你可以使用方括号运算符 [] 结合索引来访问数组中的值。语法格式为 数组[索引]。例如,假设有一个 JSON 数组 fruits,包含多个水果:

var fruits = ["apple", "banana", "orange"];

可以通过索引访问数组中的值。例如,使用 fruits[0] 可以访问数组中的第一个元素,使用 fruits[1] 可以访问数组中的第二个元素,以此类推。

var firstFruit = fruits[0]; // "apple"
var secondFruit = fruits[1]; // "banana"

运行结果如下
在这里插入图片描述
2.循环遍历:如果想遍历整个 JSON 数组并访问其中的每个值,可以使用循环(如 for 循环或 forEach 循环)来实现。例如,使用 for 循环来遍历 fruits 数组:

var fruits = ["apple", "banana", "orange"];

for (var i = 0; i < fruits.length; i++) {
    console.log(fruits[i]);
}

运行结果如下
在这里插入图片描述
要访问嵌套 JSON 数组中的值,可以结合点运算符和方括号运算符。使用点运算符可以直接访问到数组对象,在这之上再使用索引或键来访问特定的属性。同时,可以使用循环来遍历整个 JSON 数组。

假设有一个 JSON 对象 data,包含嵌套的数组:

var data = {
    "students": [
        { "name": "Alice", "age": 20 },
        { "name": "Bob", "age": 25 },
        { "name": "Charlie", "age": 22 }
    ]
};

要访问学生数组中的第一个学生的姓名,可以使用 data.students[0].namedata["students"][0]["name"]

var name = data.students[0].name; // "Alice"
var name = data["students"][0]["name"]; // "Alice"

运行结果如下
在这里插入图片描述

🔊修改JSON数组里的值

要修改JSON数组中的值,可以先使用JSON.parse()函数将JSON字符串转换为JavaScript数组,然后按照以下步骤进行修改:

1.通过索引访问数组元素

let jsonArray = JSON.parse('[{"name":"John", "age":30}, {"name":"Jane", "age":20}]');
let obj = jsonArray[0];

2.要修改数组元素中的属性,可以直接使用点运算符或方括号运算符

obj.name = 'Mike'; // 直接使用点运算符
obj['age'] = 45; // 使用方括号运算符

3.修改完对象属性后,需要再次将整个数组转换回JSON格式

jsonArray = JSON.stringify(jsonArray);
console.log(jsonArray); // 输出 '[{"name":"Mike","age":45},{"name":"Jane","age":20}]'

代码运行如下
在这里插入图片描述
需要注意的是,如果JSON数组中的元素本身也是一个对象,那么还需要先将其转换为JavaScript对象,才能进行修改。此外,修改后的JSON字符串需要再次使用JSON.stringify()函数转换为JSON格式。

🔊删除JSON数组元素

要删除JSON数组中的值,可以先使用JSON.parse()函数将JSON字符串转换为JavaScript数组,然后按照以下步骤进行删除:

1.使用标准的JavaScript数组方法删除元素

let jsonArray = JSON.parse('[{"name":"John", "age":30}, {"name":"Jane", "age":20}]');

// 删除第一个元素
jsonArray.splice(0, 1);

console.log(JSON.stringify(jsonArray)); // 输出 '[{"name":"Jane","age":20}]'

运行结果如下
在这里插入图片描述
2.如果想更精确地指定要删除哪个元素,也可以通过索引来查找并删除它

let jsonArray = JSON.parse('[{"name":"John", "age":30}, {"name":"Jane", "age":20}]');

// 删除“John”对象
for(let i=0; i<jsonArray.length; i++) {
    if(jsonArray[i].name === 'John') {
        jsonArray.splice(i, 1);
        break;
    }
}

console.log(JSON.stringify(jsonArray)); // 输出 '[{"name":"Jane","age":20}]'

运行结果如下
在这里插入图片描述
需要注意的是,这些方法只能删除整个元素,而不能删除单个属性。如果要删除属性,需要先将元素转换为对象,再使用delete运算符删除相应的属性,然后将整个数组转换回JSON格式。

☃️JSON的使用

🔊JSON.parse()

JSON.parse() 是一个内置于所有现代浏览器和Node.js中的JavaScript函数,用于将符合JSON格式的字符串解码为JavaScript对象。以下是关于JSON.parse()的一些重要细节:

  1. 语法:JSON.parse(text[, reviver])

    • text:必需参数,表示要被解析成JavaScript值的字符串。
    • reviver:可选参数,表示转换器函数,它可以处理每个属性。在将属性添加到新创建的对象之前,会对每个属性应用此函数。
  2. 返回值:如果输入的是有效的JSON文本,那么JSON.parse()函数将返回一个新的JavaScript对象。如果输入的是无效的JSON文本,则会抛出一个SyntaxError异常。

  3. 示例:

    let jsonString = '{"name":"John", "age":30, "city":"New York"}';
    
    let obj = JSON.parse(jsonString);
    
    console.log(obj); // 输出:{ name: 'John', age: 30, city: 'New York' }
    
  4. 注意事项:

    • 在使用JSON.parse()函数时,需要注意输入的字符串必须是有效的JSON格式,否则会导致解析失败并抛出错误。
    • 如果在解析过程中遇到未知字符或非法语法,则会导致JSON.parse()函数停止解析并抛出错误。
    • 如果想要更全面地控制解析过程,可以提供一个可选的转换器函数作为第二个参数,以便在将属性添加到新创建的对象之前对其进行处理。

运行结果如下
在这里插入图片描述

🔊JSON.stringify()

JSON.stringify() 是一个内置于所有现代浏览器和Node.js中的JavaScript函数,用于将JavaScript值转换为符合JSON格式的字符串。以下是关于JSON.stringify()的一些重要细节:

  1. 语法:JSON.stringify(value[, replacer[, space]])

    • value:必需参数,表示要被转换成JSON字符串的JavaScript值。
    • replacer:可选参数,表示转换器函数或数组,它可以决定哪些值应该被包含在最终的JSON字符串中,以及它们应如何被转换。
    • space:可选参数,表示要在输出的JSON字符串中的每个级别前插入多少个空格,以提高可读性。
  2. 返回值:如果输入的值可以被安全地转换为JSON格式,那么JSON.stringify()函数将返回一个新的JSON字符串。如果输入的值不能被安全地转换为JSON格式,则会抛出一个TypeError异常。

  3. 示例:

    let obj = { name: 'John', age: 30, city: 'New York' };
    
    let jsonString = JSON.stringify(obj);
    
    console.log(jsonString); // 输出:'{ "name": "John", "age": 30, "city": "New York" }'
    
  4. 注意事项:

    • 在使用JSON.stringify()函数时,需要注意JavaScript对象中的函数、RegExp对象、Date对象、DOM节点等特殊类型的值无法被安全地转换为JSON格式,因此在转换过程中会被忽略。
    • 如果提供的可选参数replacer是一个数组,那么只有那些在数组中存在的属性才会被包含在最终的JSON字符串中。
    • 如果提供了可选参数space,那么在输出的JSON字符串中的每个级别前都会插入相应数量的空格,以提高可读性。

运行结果如下
在这里插入图片描述

🔊JSON5

JSON5是一种扩展的JSON语法,它允许使用一些额外的特性,如:

  • 多行注释(// 和 /* … */);
  • 字面量NaN和Infinity;
  • 布尔值true和false的大写形式;
  • 函数表达式;
  • 箭头函数;
  • Set和Map结构;
  • 引用类型;
  • 类;
  • 导出和导入;
  • 字符串模板等等。

JSON5并不直接支持JavaScript的所有功能,而是只支持一些常用的特性。这使得它可以在跨平台的环境中更好地工作,并且具有更好的兼容性。

注意,尽管许多现代浏览器都支持JSON5,但并不是所有的环境都支持。因此,在实际使用中,建议先使用JSON.parse()JSON.stringify()函数将JSON5转换为标准的JSON,然后再进行处理。

📖总结

总的来说,JSON 是一种简洁、易于理解和跨平台的数据格式,常用于前后端数据传输和存储。通过学习 JSON,我们可以更好地处理和操作数据。


🎨觉得不错的话记得点赞收藏呀!!🎨

😀别忘了给我关注~~😀

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

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

相关文章

k8s部署jenkins

1.先决条件 1.因为国内的容器镜像加速器无法实时更新docker hub上的镜像资源.所以可以自己进行jenkins的容器镜像创建,. 2.这里用到了storageClass k8s的动态制备.详情参考: k8s-StoargClass的使用-基于nfs-CSDN博客 3.安装docker服务.(用于构建docker image) 2.构建jenki…

案例-某乎参数x-zse-96逆向补环境

文章目录 前言一、流程分析二、导出代码三、补环境总结 前言 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则…

Django回顾【二】

一、Web框架 Web框架&#xff08;Web framework&#xff09;是一种开发框架&#xff0c;用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式&#xff0c;也为web行为提供了一套通用的方法。web框架已经实现了很多功能&#xff0c;…

C语言——有一个3*4的矩阵,要求求出其中值最大的那个元素的值,以及其所在的行号和列号

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j,row0,colum0,a[3][4]{{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};int maxa[0][0];for ( i 0; i < 3; i)//行&#xff08;row&#xff09;{for ( j 0; j < 4; j)//列&#xff08;colum&#xf…

API接口测试工具的主要作用及选择指南

API接口测试是现代软件开发中至关重要的一环。为了确保不同组件之间的无缝集成和功能正常运作&#xff0c;API接口测试工具应运而生。本文将介绍API接口测试工具的主要作用&#xff0c;以及在选择适合项目的工具时需要考虑的因素。 1、功能测试&#xff1a;API接口测试工具的首…

深入理解 SQL UNION 运算符及其应用场景

SQL UNION运算符 SQL UNION运算符用于组合两个或多个SELECT语句的结果集。 每个UNION中的SELECT语句必须具有相同数量的列。列的数据类型也必须相似。每个SELECT语句中的列也必须按照相同的顺序排列。 UNION语法 SELECT column_name(s) FROM table1 UNION SELECT column_na…

你真的懂人工智能吗?AI真的只是能陪你聊天而已吗?

提到AI这个词语&#xff0c;相信大家并不陌生&#xff0c;尤其是前段时间爆火的chatgpt&#xff0c;让我们发现似乎AI已经渗透到我们生活的方方面面了&#xff0c;但是你确定你真的了解AI这个事物吗&#xff1f;它真的只是一个简简单单的人工智能吗&#xff1f;恐怕不止如此。那…

Python解释器下载和安装

什么是python解释器 一款用于执行python代码的应用程序 如何下载python解释器 下载网址&#xff1a;Download Python | Python.org 安装步骤&#xff1a; 双击下载下来的安装包测试

【2023传智杯】第六届传智杯程序设计挑战赛AB组-DEF题解题分析详解【JavaPythonC++解题笔记】

本文仅为【2023传智杯】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言更新进度记录二.比赛题目(AB俩组)D题题目-abbE题题目 -kotori和…

Postgresql数据库运维统计信息

如果需要使用以下运维信息&#xff0c;需要如下几步 修改postgresql.conf文件 #shared_preload_libraries # (change requires restart)shared_preload_libraries pg_stat_statements重启数据库创建扩展 CREATE EXTENSION IF NOT EXISTS pg_stat_statements;1. 统计信息…

记录:Unity脚本的编写7.0

目录 连接数据库编写脚本查看效果查增删 有段时间没有更新了&#xff0c;现在有点空&#xff0c;就继续写一下unity的脚本&#xff0c;这次就来写一下关于unity连接数据库的内容 连接数据库 无论是什么语言与应用场景&#xff0c;总有一项东西是绕不开的&#xff0c;那就是数据…

数据库应用:Ubuntu 20.04 安装MongoDB

目录 一、理论 1.MongoDB 二、实验 1.Ubuntu 20.04 安装MongoDB 三、问题 1.Ubuntu Linux的apt 包管理器更新安装软件报错 2.Ubuntu20.04安装vim报错 3.Ubuntu20.04如何更换阿里源 4.Ubuntu22.04如何更换阿里源 一、理论 1.MongoDB &#xff08;1&#xff09;概念 …

MagicPipe3D地下管网三维建模数据规格

经纬管网建模系统MagicPipe3D&#xff08;www.magic3d.net&#xff09;本地离线参数化构建三维地下管网&#xff08;含管道、接头、附属物等&#xff09;模型&#xff0c;输出标准3DTiles、Obj等格式&#xff0c;支持Cesium、Unreal、Unity等引擎可视化查询。MagicPipe3D三维建…

Python之变量命名、运算符和面向对象

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

【Java Spring】SpringBoot 配置文件

1、Spring Boot配置文件的作用 配置文件的基本作用&#xff1a; 数据库连接信息&#xff08;包括用户名和密码的设置&#xff09;项目的启动端口第三方系统的调用密钥等信息用于发现和定位问题的普通日志和异常日志等 2、Spring Boot配置文件的格式 Spring Boot配置文件主要…

中间件安全:Weblogic 漏洞.(使用工具可以利用多种类型漏洞)

中间件安全&#xff1a;Weblogic 漏洞.&#xff08;使用工具可以利用多种类型漏洞&#xff09; WebLogic 是美国 Oracle 公司出品的一个 application server&#xff0c;确切的说是一个基于 JAVA EE 架构的中间件&#xff0c;WebLogic 是用于开发、集成、部署和管理大型分布式…

filebeat 日志收集工具

elk&#xff1a;filebeat日志收集工具和logstash相同。 filebeat是一个轻量级的日志收集工具&#xff0c;所使用的系统资源比logstash部署和启动时使用的资源要小的多。 filebeat可以运行在非Java环境。他可以代理logtash在非java环境上收集日志。 filebeat无法实现数据的过…

Python编程进阶:掌握描述符与装饰器的神奇妙用

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python 是一种多范式编程语言&#xff0c;具有灵活的特性&#xff0c;其中可调用实例、嵌套函数、描述符和装饰器是其功能强大的特性之一。这些概念对于编写高效、优雅的代码至关重要。 可调用实例 在 Python …

leetCode 100. 相同的树 和 leetCode 101. 对称二叉树 和 110. 平衡二叉树 和 199. 二叉树的右视图

1.leetCode 100. 相同的树 C代码&#xff1a; class Solution { public:bool isSameTree(TreeNode* p, TreeNode* q) {if(p nullptr || q nullptr) return pq;return p->val q->val && isSameTree(p->left,q->left) && isSameTree(p->righ…

「有问必答」秒杀系统 Go并发编程实践!

有问必答 摘要 本文将介绍如何使用Go语言的并发原语来构建一个简单的高并发秒杀系统。 我们将使用Go语言的原生库和一些常见的技术手段&#xff0c;包括互斥锁、通道、计数器等&#xff0c;来解决并发访问和数据一致性的问题。 本文只是一个简单的示例&#xff0c;重点是Go语…