jQuery简介

简介

JSON,即JavaScript对象表示法,是一种用于共享数据的格式。顾名思义,JSON 源自 JavaScript 编程语言,但也可被许多其他语言使用,包括 Python、Ruby、PHP 和 Java。JSON 通常发音为“杰森”。

JSON 也具有可读性强、轻量级、是 XML 的良好替代品,并且需要更少的格式化。本信息指南将讨论 JSON 文件中可用的数据,以及该格式的一般结构和语法。

语法和结构理解

JSON 在独立存在时使用 .json 扩展名,当它在另一个文件格式中定义时(如 .html),它可以作为 JSON 字符串出现在引号内,或者可以作为分配给变量的对象。该格式在 Web 服务器和客户端或浏览器之间传输。

JSON 对象 是一种键-值数据格式,通常用花括号表示。在使用 JSON 时,你可能会在 .json 文件中遇到 JSON 对象,但它们也可以存在于程序上下文中作为 JSON 对象或字符串。

以下是 JSON 对象的示例:

{"first_name" : "Sammy","last_name" : "Shark","location" : "Ocean","online" : true,"followers" : 987 
}

尽管这只是一个简短的示例,JSON 可能会有很多行,但这个示例表明,该格式通常设置为两个花括号(或大括号),分别用 { } 表示,并且键-值对填充在它们之间的空间中。大多数在 JSON 中使用的数据最终都被封装在 JSON 对象中。

键-值对 之间用冒号分隔,如 "key" : "value"。每个键-值对之间用逗号分隔,因此 JSON 中间部分列出如下:"key" : "value", "key" : "value", "key": "value"。在前面的示例中,第一个键-值对是 "first_name" : "Sammy"

JSON 位于冒号的左侧。它们需要用双引号括起来,如 "key",并且可以是任何有效的字符串。在每个对象中,键需要是唯一的。这些键字符串可以包括空格,如 "first name",但这可能会使编程时更难访问,因此最好使用下划线,如 "first_name"

JSON 位于冒号的右侧。在粒度级别上,这些值需要是以下六种数据类型之一:

  • 字符串
  • 数字
  • 对象
  • 数组
  • 布尔值(true 或 false)
  • null

在更广泛的层面上,值也可以由 JSON 对象或数组的复杂数据类型组成,这将在下一节中讨论。

传递给 JSON 的每种数据类型都将保持其自己的语法,这意味着字符串将用引号括起来,但数字则不会。

.json 文件中,通常会得到一个跨越多行的格式,但 JSON 也可以写在一行中,如下例所示:

{ "first_name" : "Sammy", "last_name": "Shark",  "online" : true, }

这在另一种文件类型中或在遇到 JSON 字符串时更常见。

将 JSON 格式写在多行上通常会使其更易读,特别是在处理大型数据集时。因为 JSON 忽略其元素之间的空格,你可以在冒号和键-值对之间留出空格,以使数据更易读:

{ "first_name"  :  "Sammy", "last_name"   :  "Shark", "online"      :  true 
}

重要的是要记住,尽管它们看起来相似,但 JSON 对象与JavaScript 对象的格式不同,因此尽管你可以在 JavaScript 对象中使用函数,但你不能将它们用作 JSON 中的值。JSON 最重要的属性是它可以在所有参与的语言都能处理的格式中在编程语言之间轻松传输。相比之下,JavaScript 对象只能通过 JavaScript 编程语言直接使用。

JSON 可以变得越来越复杂,其中包括由嵌套对象和数组组成的层次结构。接下来,你将了解更多关于这些复杂结构的内容。

在 JSON 中使用复杂类型

JSON 可以存储嵌套对象和嵌套数组的 JSON 格式。这些对象和数组将作为分配给键的值传递,并且可能由键-值对组成。

嵌套对象

在以下 users.json 文件中,对于每个四个用户("sammy""jesse""drew""jamie"),都有一个嵌套的 JSON 对象作为每个用户的值,其中包含与每个用户相关的 "username""location" 的嵌套键。以下代码块中的每个用户条目都是嵌套 JSON 对象的示例:

{ "sammy" : {"username"  : "SammyShark","location"  : "Indian Ocean","online"    : true,"followers" : 987},"jesse" : {"username"  : "JesseOctopus","location"  : "Pacific Ocean","online"    : false,"followers" : 432},"drew" : {"username"  : "DrewSquid","location"  : "Atlantic Ocean","online"    : false,"followers" : 321},"jamie" : {"username"  : "JamieMantisShrimp","location"  : "Pacific Ocean","online"    : true,"followers" : 654}
}

在这个示例中,整个过程中都使用花括号来形成一个嵌套的 JSON 对象,其中包含了每个四个用户的相关用户名和位置数据。与任何其他值一样,使用对象时,逗号用于分隔元素。

嵌套数组

数据也可以通过使用作为值传递的 JavaScript 数组在 JSON 格式中进行嵌套。JavaScript 在其数组类型的两端使用方括号 [ ]。数组是有序集合,可以包含不同数据类型的值。

例如,当处理可以分组在一起的大量数据时,可以使用数组,比如当一个单一用户关联有各种网站和社交媒体资料时。

使用第一个嵌套数组,代表 "Sammy" 的用户资料可能如下所示:

{ "first_name" : "Sammy","last_name" : "Shark","location" : "Ocean","websites" : [{"description" : "work","URL" : "https://www.digitalocean.com/"},{"desciption" : "tutorials","URL" : "https://www.digitalocean.com/community/tutorials"}],"social_media" : [{"description" : "twitter","link" : "https://twitter.com/digitalocean"},{"description" : "facebook","link" : "https://www.facebook.com/DigitalOceanCloudHosting"},{"description" : "github","link" : "https://github.com/digitalocean"}]
}

"websites" 键和 "social_media" 键各自使用数组来嵌套属于 Sammy 的两个网站链接和三个社交媒体资料链接的信息。你可以通过使用方括号来识别这些是数组。

在 JSON 格式中使用嵌套允许你处理更复杂和分层的数据。

将 JSON 与 XML 进行比较

XML,即 eXtensible Markup Language,是一种可以被人类和机器读取的存储可访问数据的方式。XML 格式可在许多编程语言中使用。

在许多方面,XML 与 JSON 类似,但它需要更多的文本,使其变得更长且更耗时来读写。XML 还必须使用 XML 解析器进行解析,而 JSON 可以使用标准函数进行解析。此外,与 JSON 不同,XML 不能使用数组。

以下是 XML 格式的示例:

<users><user><username>SammyShark</username> <location>Indian Ocean</location></user><user><username>JesseOctopus</username> <location>Pacific Ocean</location></user><user><username>DrewSquir</username> <location>Atlantic Ocean</location></user><user><username>JamieMantisShrimp</username> <location>Pacific Ocean</location></user>
</users>

现在,比较相同数据在 JSON 中的呈现:

{"users": [{"username" : "SammyShark", "location" : "Indian Ocean"},{"username" : "JesseOctopus", "location" : "Pacific Ocean"},{"username" : "DrewSquid", "location" : "Atlantic Ocean"},{"username" : "JamieMantisShrimp", "location" : "Pacific Ocean"}
] }

JSON 要紧凑得多,而且不需要结束标签,而 XML 需要。此外,XML 没有使用数组,而这个 JSON 示例使用了数组(你可以通过使用方括号来识别)。

如果你熟悉 HTML,你会注意到 XML 在标签使用上与 HTML 相似。虽然 JSON 比 XML 更精简且不冗长,且在许多情况下更快速,包括 AJAX 应用程序,但在决定使用何种数据结构之前,你首先要了解你正在处理的项目类型。

结论

JSON 是一种轻量级格式,使你能够共享、存储和处理数据。作为一种格式,JSON 在 API 中得到了越来越多的支持,包括 Twitter API。JSON 也是 JavaScript 中自然的格式,并且在许多流行的编程语言中有许多可用的实现。你可以在“Introducing JSON”网站上阅读完整的语言支持。

因为你可能不会创建自己的 .json 文件,而是从其他来源获取它们,所以重要的是少考虑 JSON 的结构,而更多地考虑如何最好地在程序中使用 JSON。例如,你可以使用开源工具 Mr. Data Converter 将你在电子表格程序中找到的 CSV 或制表符分隔的数据转换为 JSON。你还可以使用知识共享许可的 utilities-online.info 网站将 XML 转换为 JSON,反之亦然。

最后,当将其他数据类型转换为 JSON,或创建自己的 JSON 时,你可以使用 JSONLint 验证你的 JSON,并在 web 开发环境中使用 JSFiddle 测试你的 JSON。

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

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

相关文章

多个总体均值的检验(二)

霍特林T方分布&#xff08;Hotellings T-square distribution&#xff09;是多元统计分析中的一种分布。它是由美国数学家哈罗德霍特林&#xff08;Harold Hotelling&#xff09;于1931年提出的&#xff0c;用于描述多个变量之间的关系。 霍特林T方分布是基于多元正态分布的推…

幻兽帕鲁怎么样?好玩? Mac版的玩《幻兽帕鲁》也很简单,只需三个步骤

幻兽帕鲁怎么样 幻兽帕鲁是一款集合了多种游戏元素的游戏&#xff0c;它巧妙地融合了《方舟:生存进化》的野外生存挑战、《荒野之息》的开放世界探索、《魔兽世界》的多元角色互动以及宝可梦的精灵捕捉与培养等经典游戏元素。游戏的核心系统是「帕鲁」捕获&#xff0c;你可以让…

【动态规划】【子序列除重】【C++算法】1987不同的好子序列数目

作者推荐 【动态规划】【状态压缩】【2次选择】【广度搜索】1494. 并行课程 II 本文涉及知识点 动态规划汇总 LeetCode1987:不同的好子序列数目 给你一个二进制字符串 binary 。 binary 的一个 子序列 如果是 非空 的且没有 前导 0 &#xff08;除非数字是 “0” 本身&…

机器学习-线性回归法

线性回归算法 解决回归问题思想简单&#xff0c;实现容易许多强大的非线性模型的基础结果具有很好的可解释性蕴含机器学习中的很多重要思想 样本特征只有一个&#xff0c;称为&#xff1a;简单线性回归 通过分析问题&#xff0c;确定问题的损失函数或者效用函数 通过最优化…

Linux死机排查方法——内存日志

一般情况下&#xff0c;Linux系统在死机时会产生一些dump信息&#xff0c;例如oops&#xff0c;通过分析oops信息就可以基本定位问题所在&#xff0c;但有些特殊情况下死机时&#xff0c;没有任何的打印的信息。如果直接使用printk等打印排查问题&#xff0c;有可能会因为print…

9.4 OpenGL帧缓冲:纹理和帧缓冲之间的反馈循环

纹理和帧缓冲之间的反馈循环 Feedback Loops Between Textures and the Framebuffer 当在图形编程中&#xff0c;特别是OpenGL这样的图形API中处理纹理&#xff08;Texture&#xff09;和帧缓冲区&#xff08;Framebuffer&#xff09;时&#xff0c;可能会出现一种称为“反馈循…

【数据库】详细说一下一条 MySQL 语句执行的步骤

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 Server 层按顺序执行 SQL 的步骤为&#xff1a; 我的其他博客 ​ 正文 Server 层按顺序执行 SQL 的步骤为&#xff1a; 客户端请求 -&g…

【C语言 - 哈希表 - 力扣 - 相交链表】

相交链表题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0…

【TCP】高频面试题

前言 在IT行业的求职过程中&#xff0c;传输控制协议&#xff08;TCP&#xff09;作为网络通信的核心协议之一&#xff0c;其相关面试题常常出现在各大公司面试中。TCP的稳定性和可靠性是支撑互联网数据传输的基石&#xff0c;因此&#xff0c;对TCP有深入理解不仅能够帮助求职…

掌握文本数据利器:Linux环境下的文本处理工具与技巧大揭秘!

前言 在当今信息爆炸的时代&#xff0c;处理文本数据已经成为了许多领域中不可或缺的一部分。无论是数据分析、文本挖掘、日志分析还是文档处理&#xff0c;我们都需要有效地处理大量的文本数据。而在Linux环境下&#xff0c;我们拥有丰富而强大的文本处理工具和技巧&#xff…

2024年华为OD机试真题-计算三叉搜索树的高度-Python-OD统一考试(C卷)

题目描述: 定义构造三叉搜索树规则如下: 每个节点都存有一个数,当插入一个新的数时,从根节点向下寻找,直到找到一个合适的空节点插入。 查找的规则是: 1. 如果数小于节点的数减去500,则将数插入节点的左子树 2. 如果数大于节点的数加上500,则将…

网络协议与攻击模拟_15FTP协议

了解FTP协议 在Windows操作系统上使用serv-U软件搭建FTP服务 分析FTP流量 一、FTP协议 1、FTP概念 FTP&#xff08;文件传输协议&#xff09;由两部分组成&#xff1a;客户端/服务端&#xff08;C/S架构&#xff09; 应用场景&#xff1a;企业内部存放公司文件、开发网站时利…

centos7指定目录上传到google云盘

from datetime import datetime, timedelta from concurrent.futures import ThreadPoolExecutor import os,time,subprocess,tracebackdef run_cmd(command):"""运行命令并返回输出。"""shell Trueprint(command,command)result subprocess.r…

解密 ARMS 持续剖析:如何用一个全新视角洞察应用的性能瓶颈?

作者&#xff1a;饶子昊、杨龙 应用复杂度提升&#xff0c;根因定位困难重重 随着软件技术发展迭代&#xff0c;很多企业软件系统也逐步从单体应用向云原生微服务架构演进&#xff0c;一方面让应用实现高并发、易扩展、开发敏捷度高等效果&#xff0c;但另外一方面也让软件应…

[leetcode] 30. 串联所有单词的子串

文章目录 题目描述解题方法滑动窗口java代码复杂度分析 题目描述 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab"…

【芯片设计- RTL 数字逻辑设计入门 10 -- 奇偶校验实现】

文章目录 奇偶校验单目运算符&#xff08;|,^,&&#xff09;verilog codeverilog codetestbench code 问题总结 奇偶校验 现在需要对输入的32位数据进行奇偶校验,根据sel输出校验结果。 实际上这里做的是奇偶检测&#xff0c;如果是奇数个 1 则结果为 1&#xff0c;使用…

C#入门详解_01_课程简介、C#语言简介、开发环境和学习资料的准备

文章目录 1. 课程简介2. C#语言简介3.开发环境与学习资料 1. 课程简介 开设本课程的目的 传播C#开发的知识&#xff0c;让更多的人有机会接触到软件开发行业引导有兴趣或者想转行的朋友进入软件开发行业 课程内容 完整讲述C#语言在实际软件开发中的应用采用知识讲述加实例程序…

VR视频编辑解决方案,全新视频内容创作方式

随着科技的飞速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正逐渐成为各个领域的创新力量。而美摄科技&#xff0c;作为VR技术的引领者&#xff0c;特别推出了一套全新的VR视频编辑方案&#xff0c;为企业提供了一个全新的视频内容创作方式。 美摄科技的VR视频编…

8.0 Zookeeper 四字命令教程详解

zookeeper 支持某些特定的四字命令与其交互&#xff0c;用户获取 zookeeper 服务的当前状态及相关信息&#xff0c;用户在客户端可以通过 telenet 或者 nc&#xff08;netcat&#xff09; 向 zookeeper 提交相应的命令。 安装 nc 命令&#xff1a; $ yum install nc …

Linux命令-atrm命令(删除待执行任务队列中的指定任务)

说明 atrm命令 用于删除待执行任务队列中的指定任务。 语法 atrm(选项)(参数)选项 -V&#xff1a;显示版本号参数 任务号&#xff1a;指定待执行队列中要删除的任务 示例 删除已经排队的任务 # 显示当前已经设置的任务 atq 2 Mon May 17 08:00:00 2010 a root 1 Sat May…