JSON(JavaScript Object Notation)

目录

是什么

为什么会设计json

数据结构

数据类型

字符串(String)

数字(Number)

对象(Object)

数组(Array)

布尔值(Boolean)

null

基本结构

对象(Object)

数组(Array)

格式结合示例

数组中包含对象数据格式

数组包含各种数据类型

对象包含数组数据类型

对象包含各种数据类型

易错点

对象存储数组数据类型

数组存储对象数据类型

嵌套问题


是什么

JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言的文本格式来存储和表示数据。简单、清晰的层次结构使得 JSON 成为理想的数据交换语言。并且目前这种数据格式比较流行,逐渐替换掉了传统的xml数据格式。

总结:JSON是一种轻量级的数据交换格式并且还是与语言无关的数据交换。


为什么会设计json

JSON的设计是为了解决数据交换中的复杂性,提高数据处理的效率和可读性,同时保持跨语言和平台的兼容性。以下为原因解释:

  • 简化数据交换:在早期的网络开发中,开发者需要一种既简单又高效的方式来在不同系统之间传输和存储数据。XML曾是主要的数据交换格式,但由于其语法相对繁琐,导致开发者需要花费更多的时间和精力来处理数据。JSON的设计目标就是简化这一过程,使数据交换变得更为简单和清晰。
  • 易于阅读和编写:JSON的语法简洁,格式清晰,易于人类阅读和理解。这有助于开发者快速地识别和修改数据,减少了出错的可能性。
  • 易于机器解析和生成:JSON的简洁语法也使其易于被计算机程序解析和生成。这大大提高了数据处理的效率,特别是在网络传输和服务器端处理中。
  • 跨语言和平台兼容性:JSON是一种语言无关的数据格式,可以被各种不同的编程语言和平台所支持。这使得JSON成为了一种理想的数据交换格式,能够在不同的系统和应用之间进行无缝的数据交换。
  • 支持复杂数据结构:尽管JSON的语法简洁,但它仍然能够表示复杂的数据结构。通过对象和数组的嵌套,JSON可以灵活地表示各种复杂的数据关系,满足了各种应用程序的需求。

数据结构

JSON格式最外层基本结构和内层数据类型说明。

数据类型

虽然JSON来源于JavaScript,但它并不包含JavaScript中的所有数据类型,比如函数或undefined在JSON中,这些类型是不被支持的。

数据类型:字符串、数字、对象、数组、布尔值、null。

字符串(String)
  • 字符串是JSON中的文本数据,用双引号括起来。
  • 字符串中可以包含转义字符,如 \n (换行)、\t(制表符)、\"(双引号)等。

示例:"Hello,World!"

数字(Number)
  • JSON中的数字可以是整数或浮点数。
  • 不支持八进制和十六进制字面量。

示例:123、0.12、-9876.5

对象(Object)
  • 对象是一组无序的键值对集合,键是字符串,值可以是任何JSON数据类型。
  • 对象使用花括号 {} 表示。
  • 对象可以包含其他对象作为值,形成嵌套结构。

示例:{"name":"John","age":30}

数组(Array)
  • 数组是有序的值列表,值可以是任何JSON数据类型。
  • 数组使用方括号 [] 表示。
  • 数组可以包含其他数组作为元素,同样也可以包含对象,实现更深层次的嵌套。

示例:[1,"apple",true,null]

布尔值(Boolean)
  • JSON中有两个布尔值:true 和 false。

示例:true、false

null
  • null 是一个特殊的标记,表示空值或不存在的值。

示例:null

基本结构

JSON数据格式最外层可以是两种基本结构之一:对象(Object)或数组(Array)。

对象和数组。这两种类型可以相互嵌套,形成更复杂的数据结构。

对象(Object)

说明:在JSON中,对象被表示为一系列的键值对,其中键是字符串可以是任何JSON数据类型(字符串、数字、对象(另一个JSON对象)、数组、布尔值(true 或 false)或者 null。对象用大括号 {} 包围。

语法:{"key1":obj,"key2":obj,"key3":obj...}

获取数据:通过键来访问值。

示例:

{  "name": "John",  "age": 30,  "isStudent": false  
}
数组(Array)

说明:JSON,数组是有序的值的集合。这些值可以是任何JSON数据类型(字符串、数字、对象、数组、布尔值或 null。数组用方括号 [] 包围。

语法:[obj,obj,obj...]

获取数据:通过索引(从0开始)来访问每个元素。

示例:

[  "apple",  "banana",  "cherry"  
]

PS:在JSON中,对象的键值对用冒号 : 分隔不同的键值对之间用逗号 , 分隔,并且整个对象用大括号 {} 包围数组则使用方括号 [] 包围数组中的元素用逗号 , 分隔。对象格式最后一个键值对和数组格式最后一个元素后不能使用逗号。


格式结合示例

数组中包含对象数据格式

[  {  "name": "John",  "age": 30,  "city": "New York"  },  {  "name": "Jane",  "age": 25,  "city": "Los Angeles"  },  {  "name": "Bob",  "age": 35,  "city": "Chicago"  }  
]

数组包含各种数据类型

数组格式中可以同时包含各种数据类型

[  {                            // 对象"name": "John",  "age": 30  },  "Hello, World!",             // 字符串true,                        // 布尔值42,                          // 数字null,                        // null值[1, 2, 3, 4, 5]              //另一个数组
]

对象包含数组数据类型

{  "student": [{  "name": "Jane Smith",  "age": 28  },  {  "name": "Bob Johnson",  "age": 32  }] 
}

对象包含各种数据类型

{  "name": "John Doe",             // 字符串  "age": 30,                      // 数字  "isStudent": false,             // 布尔值  "nullField": null,             // null值  "grades": [90, 85, 88],        // 数组  "address": {                    // 另一个对象  "street": "123 Main St",  "city": "Anytown",  "state": "CA",  "zip": "12345"  }
}

易错点

对象存储数组数据类型

在JSON对象中存储一个数组,并且这个数组没有特定的键名,那么这在JSON中是不合法的。

正确的存储方式如下:

{  "arrayKey": [  "value1",  "value2",  3,  true  ]  
}
数组存储对象数据类型

在JSON数组中存储一个对象,并且这个对象有键名,那么这在JSON中是不合法的。

正确的存储方式如下:

[  {  "name": "John",  "age": 30,  "city": "New York"  }
]
嵌套问题

对象可以嵌套数组,数组也可以嵌套对象,这种嵌套结构在理论上可以无限层深。

JSON规范本身并没有明确限制嵌套的层数,但在实际应用中,过深的嵌套可能会导致一些问题。例如,过深的嵌套可能会使得数据结构变得复杂且难以理解,增加解析和处理的难度

PS:虽然JSON格式并没有限制嵌套的层数,但过深的嵌套会产生一系列问题,建议尽量保持数据结构的简洁和清晰,避免过深的嵌套。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端和后端解决跨域问题的方法

目前很多java web开发都是采用前后端分离框架进行开发,相比于单体项目容易产生跨域问题。 一、跨域问题CORS 1.什么是跨域问题? 后端接收到请求并返回结果了,浏览器把这个响应拦截了。 2.跨域问题是怎么产生的? 浏览器基于同源…

spring boot 集成rocketMq + 基本使用

1. RocketMq基本概念 1. NameServer 每个NameServer结点之间是相互独立,彼此没有任何信息交互 启动NameServer。NameServer启动后监听端口,等待Broker、Producer、Consumer连接, 相当于一个路由控制中心。主要是用来保存topic路由信息&#…

C语言的顺序表详解

一.顺序表概念和结构 1.顺序表的概念 顺序表是一种线性表的存储结构,它通过一段连续的存储空间来存储表中的元素,元素之间的顺序由它们在存储空间中的物理位置决定。顺序表可以使用数组来实现,也称为数组顺序表。 2.顺序表的结构 顺序表的…

ETL中如何运用好MQ消息集成

一、ETL的主要作用 ETL(Extract, Transform, Load)是数据仓库中的关键环节,其主要作用是将数据从源系统中抽取出来,经过转换和清洗后加载到数据仓库中。具体而言: Extract(抽取):从…

Ubuntu 安装Java、Git、maven、Jenkins等持续集成环境

Ubuntu 持续集成 安装OpenJdk 查看所有可安装的 JDK 版本 apt list OpenJDK\*使用 apt 安装 JDK(以 11为例),最好是用11,java8对应的jenkins会有兼容问题。 sudo apt install openjdk-11-jdk openjdk-11-jre安装成功后,可以使用以…

机器学习_XGBoost模型_用C++推理示例Demo

1. 需求 将 python 训练好的 xgboost 模型, 使用C 进行加载并进行推理(预测) 2. 代码实现 #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <string> #include <xgboost/c_api.h>const char *m…

WS2812B彩灯

目录 1、介绍 2、参数 3、引脚功能 4、应用电路 5、Code 1、介绍 WS2812是一种智能控制LED灯源&#xff0c;集成了控制电路和RGB芯片在一个5050封装组件中。它的主要特点和技术规格如下&#xff1a; 集成设计&#xff1a;WS2812将控制电路和RGB芯片集成在同一个封装中&…

软考高级架构师:数据库模式概念和例题

一、AI 讲解 数据库模式分为三个层次&#xff1a;外模式、概念模式和内模式。这三个层次分别对应不同的抽象级别&#xff0c;帮助数据库管理员和用户以不同的视角理解数据库结构。 外模式&#xff08;用户级&#xff09;&#xff1a;是数据库用户的视图。每个用户可以通过外模…

HarmonyOS NEXT应用开发—在Native侧实现进度通知功能

介绍 本示例通过模拟下载场景介绍如何将Native的进度信息实时同步到ArkTS侧。 效果图预览 使用说明 点击“Start Download“按钮后&#xff0c;Native侧启动子线程模拟下载任务Native侧启动子线程模拟下载&#xff0c;并通过Arkts的回调函数将进度信息实时传递到Arkts侧 实…

下采样-高斯金字塔

高斯金字塔是一种图像金字塔的构建方法&#xff0c;用于实现图像的下采样。它通过对原始图像进行重复的高斯滤波和下采样操作&#xff0c;以获得不同分辨率的图像。下面通过图文并茂的方式详细描述高斯金字塔的构建过程。 1. 原始图像 2. 应用高斯滤波&#xff1a;首先&#…

CentOS7编译ZLMediaKit并使能WebRTC

使能WebRTC需要libsrtp库, libsrtp库需要openssl, 所以第一步先安装openssl, 系统自带的版本是1.0.2的, libsrtp需要1.1.1以上版本, 需要使用源码进行编译; GCC准备 需要安装gcc7以上版本, 并切换到gcc7的编译环境 yum install centos-release-scl yum install devtoolset-7…

神经网络背后的数学原理

原文地址&#xff1a;The Math Behind Neural Networks 2024 年 3 月 29 日 深入研究现代人工智能的支柱——神经网络&#xff0c;了解其数学原理&#xff0c;从头开始实现它&#xff0c;并探索其应用。 神经网络是人工智能 &#xff08;AI&#xff09; 的核心&#xff0c;为…

智能网络新纪元:机器学习赋能未来计算机网络高速发展

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

软件无线电系列——多率信号处理之抽取

本节目录 一、等效基带谱 二、抽取概念 三、低通信号的整数倍抽取 四、数字带通信号的抽取 1、整带抽取 2、带通信号的正交复抽取 3、带通信号的正交实抽取本节内容 一、等效基带谱 对于任何采样频率为fs的实采样信号&#xff0c;无论是Nyquist采样还是带通采样&#xff0c;采…

企业培训系统私有化解决方案:PlayEdu

PlayEdu&#xff1a;打造私有化的企业智慧教育平台&#xff0c;赋能全员高效成长&#xff01;- 精选真开源&#xff0c;释放新价值。 概览 随着企业不断发展及市场竞争加剧&#xff0c;内部培训的重要性日益凸显。然而&#xff0c;在实施过程中&#xff0c;如何确保培训内容与…

Android Studio开发学习(六)———TableLayout(表格布局)、FrameLayout(帧布局)

目录 前言 一、Tablelayout &#xff08;一&#xff09;Tablelayout的相关简介 &#xff08;二&#xff09;TableLayout使用方法 1. 当TableLayout下面写控件、则控件占据一行的大小。(自适应一行&#xff0c;不留空白) 2.多个组件占据一行&#xff0c;则配合TableRow实现…

【论文阅读笔记】Head-Free Lightweight Semantic Segmentation with Linear Transformer

莫名地这篇论文我特别难理解&#xff0c;配合代码也食用不了 1.论文介绍 Head-Free Lightweight Semantic Segmentation with Linear Transformer 基于线性Transformer的无头轻量级语义分割 2023年 AAAI Paper Code 2.摘要 现有的语义分割工作主要集中在设计有效的解码器&am…

【华为OD机试】最长指定瑕疵度的元音子串【C卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 开头和结尾都是元音字母(aeiouAEIOU)的字符串为元音字符串,其中混杂的非元音字母数量为其瑕疵度。比如: “a” 、“aa”是元音字符串,其瑕疵度都为 0 “aiur”不是元音字符串(结尾不是…

java数据结构与算法刷题-----LeetCode461. 汉明距离

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 异或统计1的个数2. 位移操作处理3. Brian Kernighan算法 位运…

机器学习和深度学习--李宏毅(笔记与个人理解)Day11-12

Day11 when gradient is small…… 怎么知道是局部小 还是鞍点&#xff1f; using Math 这里巧妙的说明了hessan矩阵可以决定一个二次函数的凹凸性 也就是 θ \theta θ 是min 还是max&#xff0c;最后那个有些有些 哈 是一个saddle&#xff1b; 然后这里只要看hessan矩阵是不…