JSON简介

简介

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/674157.shtml

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

相关文章

驾驭AI绘画:《AI魔法绘画》带你秒变顶级画手!

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

数据平台:湖仓一体、流批一体、存算分离的核心问题

一、为什么出现湖仓一体的技术架构 目前数据仓库存储的数据结构单一,只能存储结构化的数据,对于非结构化数据的存储需求,以及存储成本是数据仓库的主要问题,而非结构化数据存储在业务库,也造成数据不能相融和利用,为了解决非结构化数据的低成本的存储诞生了湖仓一体的技术…

从零开发短视频电商 Tesseract OCR 的 Java 拓展库 javacpp-presets

文章目录 简介添加依赖识别示例示例一 识别本地图片示例二 识别图像中的各个组件&#xff08;比如文本行&#xff0c;单词&#xff0c;或单个字符&#xff09;示例三 使用迭代器遍历识别结果及其选择项示例四 方向和脚本检测示例五 结果迭代器示例六 设置引擎、页面分割模式、语…

c# 加密解密帮助类

public class DEncryptHelper { #region Md5加密 /// <summary> /// 获取字符串MD5加密字符串 /// </summary> /// <param name"str">原始字符串</param> /// <returns>MD5加密字符串<…

redis之布隆过滤

目录 1、redis之布隆过滤 2、布隆过滤器原理 3、布隆过滤器使用步骤 初始化bitmap 添加占坑位 判断是否存在圜 1、redis之布隆过滤 布隆过滤&#xff1a;有一个初值都为0的bit数组和多个哈希函数构成&#xff0c;用来快速判断集合中是否存在某个元素。目的&#xff1a;减…

Python Paramiko 使用交互方式获取终端输出报错

近期接到一个需求&#xff0c;要批量登录网络设备获取配置。 原计划使用 Paramiko exec即可&#xff0c;但是后来发现&#xff0c;有些设备命令也执行了&#xff0c;但是没有回显。 于是尝试使用 invoke_shell() 方式。 前期调试倒是OK&#xff0c;直到遇见一个输出内容较长的…

MySQL 日期和时间函数全面指南

介绍: 在数据库管理中,有效处理日期和时间对于各种操作至关重要,从简单的数据检索到复杂的分析。MySQL提供了丰富的内置函数来高效地操作日期和时间值。在本指南中,我们将探讨MySQL的基本日期和时间函数的用法和功能,探讨它们的语法和实际示例。 CURDATE 和 CURRENT_DATE:…

facebook广告投流有几种方式

在Facebook上投放广告有多种方式&#xff0c;以下是一些常见的方式&#xff1a; 单一图片广告&#xff1a;这是最简单的广告格式&#xff0c;只需上传一张图片&#xff0c;并添加一些文本即可。这种广告类型适用于各种目标&#xff0c;包括提高品牌知名度、推广活动等。视频广…

python官网下载慢怎么办?这里是一些解决方法

为什么Python官网下载速度慢&#xff1f; Python官网是开源软件的官方网站&#xff0c;提供了Python编程语言的最新版本和相关资源供开发者下载。然而&#xff0c;由于全球用户访问量较大&#xff0c;有时候会导致Python官网的下载速度变慢或不稳定。这对于急需获取Python的开…

Kubernetes基础(十五)-k8s网络通信

1 k8s网络类型 2 Pod网络 2.1 同一pod内不同容器通信 Pod是Kubernetes中最小的可部署单元&#xff0c;它是一个或多个紧密关联的容器的组合&#xff0c;这些容器共享同一个网络命名空间和存储卷&#xff0c;因此Pod中的所有容器都共享相同的网络命名空间和IP地址——PodIP&a…

web 前端实现一个根据域名的判断 来显示不同的logo 和不同的标题

1.需求 有可能我做一个后台 web端 我想实现一套代码的逻辑 显示不同的公司主题logo以及内容&#xff0c;但是实际上 业务逻辑一样 2.实现 建一个store oem.ts 这个名为是 oem系统 oem.ts import { defineStore } from pinia;import { store } from /store;const oemDataLis…

Vue中v-on 可以监听多个方法吗

当然可以&#xff01;Vue.js是一款非常强大的JavaScript库&#xff0c;它提供了很多方便的方法和指令&#xff0c;使我们可以更容易地构建交互式的Web应用程序。其中&#xff0c;v-on指令是Vue.js中一个非常重要也非常常用的指令&#xff0c;它用于监听DOM事件&#xff0c;并在…

质数基础筛法

文章目录 埃氏筛线性筛 埃氏筛 埃氏筛是一种筛素数的方法&#xff0c;埃氏筛的思想很重要&#xff0c;主要是时间复杂度 朴素的埃氏筛的时间复杂度是 O ( n l o g n ) O(nlogn) O(nlogn) 这个复杂度是调和级数 vector<int>p; int vis[N];void solve() {rep(i,2,n){if(…

07-Java桥接模式 ( Bridge Pattern )

Java桥接模式 摘要实现范例 桥接模式&#xff08;Bridge Pattern&#xff09;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化 桥接模式涉及到一个作为桥接的接口&#xff0c;使得实体类的功能独立于接口实现类&#xff0c;这两种类型的类可被结构化改变而互不影…

Ubuntu22.04安装黑屏(进入U盘安装引导时 和 安装完成后)

一&#xff1a;进入U盘安转引导时黑屏 问题描述&#xff1a;选择’try or install ubuntu’&#xff0c;开始安装&#xff0c;出现黑屏。 解决方法&#xff1a;&#xff08;可行&#xff09; 安装时&#xff0c;先选择" try or install ubuntu", 此时不要按enter&a…

【知识整理】管理即服务,识人、识己

1. 背景 一个人的力量是有限的&#xff0c;如何规模化生产&#xff0c;人员的规模化组织&#xff0c;如何提升合作的规模和效率。 管理的本质&#xff1a; 1、服务他人&#xff1f; 2、激发主动性&#xff1f; 3、氛围宽松&#xff1f; 上面是理念&#xff0c; 1、那如何…

计划任务功能优化,应用商店上架软件超过100款,1Panel开源面板v1.9.6发布

2024年2月7日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.9.6版本。 在v1.9.5和v1.9.6这两个小版本中&#xff0c;1Panel针对计划任务等功能进行了多项优化和Bug修复。此外&#xff0c;1Panel应用商店新增了3款应用&#xff0c;上架精选软件应用超过1…

CGAL::2D Arrangements-4

4. Free函数 Arrangement_on_surface_2类模板是用曲线切分二维的面。因为它的接口设计是最简化的&#xff0c;这意味着它的成员函数很少执行几何操作。本章将解释怎么利用这些Free function来达到Arrangement操作。执行这些操作通常需要优秀的几何算法&#xff0c;而且有时会对…

2023年总结加2024年展望

2023年总结加2024年展望 文章目录 一、前言二、2023年总结1、生活方面2、技术方面 三、2024年展望四、为啥要写一年的总结和未来一年的展望 最后祝所有人2024年新年快乐。 一、前言 转眼间到了2024年2月8号&#xff0c;离2024阴历新年只有两天了。 不得不说光阴似箭&#xff0…

Python解决SSL不可用问题

参考&#xff1a;https://blog.csdn.net/weixin_44894162/article/details/126342591 一、问题描述&#xff1a; 报错概述&#xff1a; WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. ## 警告:pip配…