数据格式:什么是JSON和XML

news/2024/9/18 7:30:13/ 标签: json, xml

JSON和XML都是数据交换的一种格式,用于在不同的系统和应用程序之间传输和存储数据。本文将解释JSON和XML的基础内容,并探讨两者的不同。

一· 什么是JSON?

1. JSON(JavaScript Object Notation)即JavaScript对象标记法:

-JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

-JSON基于JavaScript的一个子集,但JSON是独立于语言的文本格式,许多编程语言都支持JSON。

-JSON格式的数据以键值对的形式存储,类似于编程语言中的字典或对象。

-JSON格式的数据通常用于Web开发中的前后端数据交换,API响应等。

实例:

{"name": "John","age": 28,"is_student": true,"courses": ["History", "Mathematics", "Science"]
}

2. JSON语法规则:

1). 对象(Object):

   - 对象是由花括号`{}`包围的键值对集合。

   - 每个键必须是字符串类型,并且用双引号`""`包围。

   - 键值对之间用逗号`,`分隔。

   - 对象格式示例:`{ "key1": "value1", "key2": "value2" }`

2). 数组:

   - 数组是由方括号`[]`包围的值列表。

   - 数组中的值可以是任何JSON支持的数据类型,包括字符串、数字、布尔值、null、对象或数组(其他数组)。

   - 数组中的值之间用逗号`,`分隔。

3). 字符串(String):

   - 字符串是用双引号 "' 包围的文本。

   - 特殊字符需要使用转义字符,例如:`\"`表示双引号,`\\`表示反斜杠,`\n`表示换行符。

4). 数字(Number):

   - 数字可以是整数或浮点数。

   - JSON不支持八进制和十六进制,数值必须以十进制表示。

5). 布尔值(Boolean):

   - 布尔值只有两个可能的值:`true`和`false`。

6). null(Null):

   - `null`表示空值。

7). 键值对(Key-Value Pair):

   - 键值对是构成JSON对象的基本单元。

   - 键和值之间用冒号`:`分隔。

   - 键必须是字符串类型,并且用双引号包围。

8. 逗号分隔(Comma Separation):

   - 在对象中,除了最后一个键值对外,每个键值对后都需要用逗号`,`分隔。

   - 在数组中,除了最后一个值外,每个值后都需要用逗号`,`分隔。


二· 什么是XML?

1. XML是一种标记语言,用于存储和传输数据。

-XML(eXtensible Markup Language,可扩展标记语言)是一种标记语言,用于描述数据的结构和语义。它被设计成既可用于简单的数据交换,也适用于复杂的文档结构。XML是一种自我描述语言,因为它允许你定义自己的标签(tags),这些标签描述了数据的内容和意图。

自我描述性:XML文档中的数据是自我描述的,每个元素都通过标签来描述其内容

可扩展性:可以定义自己的标签来适应特定的需求

嵌套结构:XML文档可以包含嵌套元素,这允许复杂的层次结构

广泛支持性:几乎所有现代编程语言都支持XML,并且有许多工具可以用来解析和生成XML文档

2.XML例子:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore><book><title lang="en">Harry Potter</title><author>J.K. Rowling</author><year>2005</year><price>29.99</price></book><book><title lang="en">Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price></book>
</bookstore>

<?xml version="1.0" encoding="UTF-8"?> 是XML声明,指明了XML版本和编码。

<bookstore> 是根元素,包含了整个文档的内容。

<book> 是子元素,表示书店中的一本书。

<title>, <author>, <year>, <price> 是<book>元素的子元素,分别描述了书的标题、作者、出版年份和价格。

lang="en" 是<title>元素的属性,表示标题的语种,“en”值表示标题是用English英语

</title>是结束标签

3.语法规则:

1). XML声明:

每个XML文档都可以包含一个可选的XML声明,指定XML版本和字符编码。例如:`<?xml version="1.0" encoding="UTF-8"?>`

2). 根元素:

XML文档必须有一个且仅有一个根元素,它包含所有其他元素。根元素不能有兄弟元素。

3). 元素匹配:

每个开始标签必须有一个对应的结束标签,以确保元素内容正确界定。例如:`<element>` ... `</element>`。

4). 标签嵌套:

元素标签可以嵌套,形成层次结构,但必须正确闭合,避免重叠或嵌套错误。

5). 标签名称大小写:

XML标签对大小写不敏感,但建议标签名称使用小写,以提高可读性。

6). 属性:

属性值必须用单引号或双引号括起来,但不能混用。属性名是大小写敏感的.............

三· JSON与XML的比较:

- 可读性:JSON的格式更简洁,更易于阅读和编写。XML则较为冗长,包含更多的标记。

json文档:

{"name": "John","age": 30,"is_student": false,"courses": ["Math", "Science", "English"],"address": {"street": "21 2nd Street","city": "New York","state": "NY"}
}

XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<person><name>John</name><age>30</age><is_student>false</is_student><courses><course>Math</course><course>Science</course><course>English</course></courses><address><street>21 2nd Street</street><city>New York</city><state>NY</state></address>
</person>

- 解析速度:JSON通常比XML更快地被解析,因为它的结构更简单。

- 数据结构:JSON的结构更接近于编程语言中的字典或对象,而XML则更像是一种标记语言。

- 扩展性:XML可以通过定义自己的标签来扩展,适合复杂的数据结构。JSON则更简单,但扩展性不如XML。

- 用途:JSON常用于Web开发中的API和轻量级的数据交换。XML则常用于配置文件、文档存储和企业级的数据交换。

- 支持:几乎所有现代编程语言都支持JSON。XML的支持也很广泛,但处理起来可能更复杂。

总的来说,JSON和XML都是有效的数据交换格式,选择哪一个取决于具体的应用场景和需求。

FineDataLink支持JSON解析和XML解析,使用 API输入 算子读取接口数据,再使用 JSON解析  OR XML解析 算子进行解析,可继续使用其他数据处理算子对数据进行处理,最后将数据输出。

免费试用、获取更多信息,点击了解更多>>>体验FDL功能

了解更多数据仓库与数据集成关干货内容请关注>>>FineDataLink官网


http://www.ppmy.cn/news/1525966.html

相关文章

ThinkPHP Email功能如何配置才能发送邮件?

ThinkPHP Email发送流程&#xff1f;使用ThinkPHP发Email方法&#xff1f; ThinkPHP作为一款流行的PHP框架&#xff0c;提供了强大的Email功能&#xff0c;使得开发者能够轻松实现邮件发送。AokSend将详细介绍如何配置ThinkPHP Email功能&#xff0c;以确保邮件能够顺利发送。…

【Go】Go语言基本语法--注释、变量、常量

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【C++】vector常见用法

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;C从小白到高手 &#x1f339;往期回顾&#x1f339;&#xff1a;[C]string类 &#x1f516; 流水不争&#xff0c;争的是滔滔不息。 文章目录 一、vector的介绍vector…

vite+vue3快速构建项目+router、vuex、scss安装

安装 Vite npm install -g create-vite-app创建vue3项目 npm init vitelatestnpm i安装依赖 安装veux、router npm install vue-router vuex新建router/index.js&#xff08;自己创建home、login对应页面文件&#xff09; import { createRouter, createWebHistory } from…

代码随想录 | Day20 | 二叉树:二叉树所有路径左叶子之和

代码随想录 | Day20 | 二叉树&#xff1a;二叉树所有路径&&左叶子之和 主要学习内容&#xff1a; 1.利用二叉树的谦虚遍历进行题目解答 2.to_string函数的使用 257.二叉树所有路径 257. 二叉树的所有路径 - 力扣&#xff08;LeetCode&#xff09; 解法一&#xf…

Vue面试题3

目录 1.简述对于Vue的diff算法理解&#xff1f; 2.简述Vue组件的通信&#xff08;父子组件和非父子组件&#xff09;&#xff1f; 3.简述Vue组件的通信&#xff08;兄弟组件通信&#xff09;&#xff1f; 4.简述Vuex的使用&#xff1f; 5.Vuex 页面刷新数据丢失怎么解决&am…

Mysql链接异常 | [08001] Public Key Retrieval is not allowed

Datagrid报错 [08001] Public Key Retrieval is not allowed 这个错误通常是由于 MySQL 8.0 中的新特性导致的。默认情况下&#xff0c;MySQL 8.0 使用 caching_sha2_password 作为认证插件&#xff0c;而你需要在连接 URL 中明确允许公钥检索或者使用老版本的认证方式 mysql…

S32K3 工具篇5:如何使用lauterbach下载调试elf文件

S32K3 工具篇5&#xff1a;如何使用lauterbach下载调试elf文件 一&#xff0c;利用trace32现有flash脚本烧录elf二&#xff0c;debug 现有elf文件 之前写过如何在S32DS中使用lauterbach下载&#xff0c;但是对于RTD EB MCAL的代码&#xff0c;通常情况下是使用命令的方式去编译…

重学SpringBoot3-SpringApplicationRunListener

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-SpringApplicationRunListener 1. 基本作用2. 如何实现2.1. 创建SpringApplicationRunListener2.2. 注册SpringApplicationRunListener2.3. 完整示例 3.…

k8s(kubernetes)的PV / PVC / StorageClass(理论+实践)

NFS总是不支持PVC扩容 先来个一句话总结&#xff1a;PV、PVC是K8S用来做存储管理的资源对象&#xff0c;它们让存储资源的使用变得可控&#xff0c;从而保障系统的稳定性、可靠性。StorageClass则是为了减少人工的工作量而去自动化创建PV的组件。所有Pod使用存储只有一个原则&…

深入了解HarmonyOS(鸿蒙操作系统)

深入了解HarmonyOS&#xff08;鸿蒙操作系统&#xff09;&#xff1a;全场景智慧生活的核心 引言 随着物联网和人工智能的快速发展&#xff0c;传统的操作系统已难以满足多设备、多场景的智能互联需求。为此&#xff0c;华为于2019年正式发布了自主研发的操作系统——Harmony…

【LeetCode 算法笔记】155. 最小栈

目录 问题描述单个栈实现双栈实现不开辟额外空间 问题描述 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop()…

Github 2024-09-12 Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-09-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10C项目1Terraform:基础设施即代码的开源工具 创建周期:3626 天开发语言:Go协议类型:OtherStar数量:40393 个Fork数量:9397 次关注…

ios xib 子控件约束置灰不能添加约束

添加约束时发现置灰不可点的问题 layout切换为inferred&#xff0c;就可以添加约束了

项目:完成局域网CS模型,局域网内一个服务器,多个客户端连接一个服务器,完成局域网聊天。

server.c #include<myhead.h> #define SERPORT 8888 #define SERIP "192.168.0.169" #define BACKLOG 20 typedef struct { int newfd; // 存储新文件描述符 struct sockaddr_in cin; // 存储客户端信息 } HMY; void *fun1(void *sss) { HMY *msg …

[译] 当Go程序结束时会发生什么

本篇内容是根据2021年2月份When Go programs end音频录制内容的整理与翻译,两位主持人邀请Go团队的Michael Knyszek,讨论了当Go程序结束时会发生什么 过程中为符合中文惯用表达有适当删改, 版权归原作者所有. Mat Ryer: 大家好&#xff0c;欢迎收听 Go Time。我是 Mat Ryer。今…

Mybatis-plus进阶篇(二)

文章目录 一.条件构造器方法1.eq使用范围方法签名参数说明示例 2.ne使用范围方法签名参数说明示例 3.gt使用范围方法签名参数说明示例 4.ge使用范围方法签名参数说明示例 5.lt使用范围方法签名参数说明示例 6.le使用范围方法签名参数说明示例 7.between使用范围方法签名参数说明…

18068 选择排序

### 思路 1. **初始化**&#xff1a;定义变量i, j, k和临时变量tmp。 2. **外层循环**&#xff1a;遍历数组的每个元素&#xff0c;i从0到n-2。 3. **内层循环**&#xff1a;从i1到n-1&#xff0c;找到最小元素的索引k。 4. **交换**&#xff1a;将最小元素与当前元素交换。 #…

矩阵直播换IP:如何使用代理IP提升直播效果

在直播行业中&#xff0c;稳定的网络连接和高质量的直播效果至关重要。然而&#xff0c;随着观众数量的增加和网络环境的复杂化&#xff0c;直播过程中可能会遇到网络波动、IP封禁等问题。通过使用代理IP&#xff0c;可以有效解决这些问题&#xff0c;提升直播效果。本文将详细…

Python | Leetcode Python题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:people.sort(keylambda x: (-x[0], x[1]))n len(people)ans list()for person in people:ans[person[1]:person[1]] [person]return ans