文章目录

  • 简介
  • 一,什么是 JSON?
  • 二,JSON 发展史
  • 三,为什么要使用 JSON?
  • 四,JSON 的不足
  • 五,JSON 应该如何存储?
  • 六,什么时候会使用 JSON
    • 1) 定义接口
    • 2) 序列化
    • 3) 生成 Token
    • 4) 配置文件
  • 总结

简介

JSON 全称“JavaScript Object Notation”,译为“JavaScript 对象简谱”或“JavaScript 对象表示法”,是一种轻量级的、基于文本的、开放的数据交换格式。JSON 在 Web 开发领域有着举足轻重的地位,如果您想在 Web 开发领域大展身手的话,就必须了解 JSON。

数据交换是指,两个设备之间建立连接并互相传递数据的过程。
尽管 JSON 的名称中包含“JavaScript”,但它并不是只能在 JavaScript 中使用,大多数编程语言都支持 JSON(有些本身就支持,有些可以通过第三方库得到支持),例如 JavaScript、Java、PHP、Python、C++ 等。

一,什么是 JSON?

JSON 是一种纯字符串形式的数据,它本身不提供任何方法(函数),非常适合在网络中进行传输。JavaScript、PHP、Java、Python、C++ 等编程语言中都内置了处理 JSON 数据的方法。

JSON 是基于 JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集,是一种开放的、轻量级的数据交换格式,采用独立于编程语言的文本格式来存储和表示数据,易于程序员阅读与编写,同时也易于计算机解析和生成,通常用于在 Web 客户端(浏览器)与 Web 服务器端之间传递数据。

在 JSON 中,使用以下两种方式来表示数据:

  • Object(对象):键/值对(名称/值)的集合,使用花括号 { } 定义。在每个键/值对中,以键开头,后跟一个冒号:,最后是值。多个键/值对之间使用逗号, 分隔,例如{“name”:“C语言中文网”,“url”:“http://c.biancheng.net”};
  • Array(数组):值的有序集合,使用方括号 [ ] 定义,数组中每个值之间使用逗号, 进行分隔。

下面展示了一个简单的 JSON 数据:

{"Name":"C语言中文网","Url":"http://c.biancheng.net/","Tutorial":"JSON","Article":["JSON 是什么?","JSONP 是什么?","JSON 语法规则"]
}

二,JSON 发展史

2000 年初,Douglas Crockford(道格拉斯·克罗克福特)发明了 JSON,并从 2001 年开始推广使用。同年 4 月,位于旧金山湾区某车库的一台计算机发出了首个 JSON 格式的数据,这是计算机历史上的重要时刻。

2005-2006 年,JSON 正式成为主流的数据格式,雅虎、谷歌等知名网站开始广泛使用 JSON 格式。

2013 年,ECMA International(欧洲计算机制造商协会)制定了 JSON 的语法标准——ECMA-404。

经过 20 年左右的发展,JSON 已经替代了 XML,成为了 Web 开发中首选的数据交换格式。

三,为什么要使用 JSON?

JSON 并不是唯一能够实现在互联网中传输数据的方式,除此之外还有一种 XML 格式。JSON 和 XML 能够执行许多相同的任务,那么我们为什么要使用 JSON,而不是 XML 呢?

之所以使用 JSON,最主要的原因是 JavaScript。众所周知,JavaScript 是 Web 开发中不可或缺的技术之一,而 JSON 是基于 JavaScript 的一个子集,JavaScript 默认就支持 JSON,而且只要您学会了 JavaScript,就可以轻松地使用 JSON,不需要学习额外的知识。

另一个原因是 JSON 比 XML 的可读性更高,而且 JSON 更加简洁,更容易理解。

与 XML 相比,JSON 具有以下优点:

  • 结构简单、紧凑:与 XML 相比,JSON 遵循简单、紧凑的风格,有利于程序员编辑和阅读,而 XML 相对比较复杂;
  • 更快:JSON 的解析速度比 XML 更快(因为 XML 与 HTML 很像,在解析大型 XML 文件时需要消耗额外的内存),存储同样的数据,JSON 格式所占的存储空间更小;
  • 可读性高:JSON 的结构有利于程序员阅读。

四,JSON 的不足

任何事物都不可能十全十美,JSON 也不例外,比如:

  • 只有一种数字类型:JSON 中只支持 IEEE-754 双精度浮点格式,因此您无法使用 JSON 来存储许多编程语言中多样化的数字类型;
  • 没有日期类型:在 JSON 中您只能通过日期的字符串(例如:1970-01-01)或者时间戳(例如:1632366361)来表示日期;
  • 没有注释:在 JSON 中无法添加注释;
  • 冗长:虽然 JSON 比 XML 更加简洁,但它并不是最简洁的数据交换格式,对于数据量庞大或用途特殊的服务,您需要使用更加高效的数据格式。

五,JSON 应该如何存储?

JSON 数据可以存储在 .json 格式的文件中(与 .txt 格式类似,都属于纯文本文件),也可以将 JSON 数据以字符串的形式存储在数据库、Cookie、Session 中。

要使用存储好的 JSON 数据也非常简单,不同的编程语言中提供了不同的方法来检索和解析 JSON 数据,例如 JavaScript 中的 JSON.parse() 和 JSON.stringify()、PHP 中的 json_decode() 和 json_encode()。

六,什么时候会使用 JSON

简单了解了 JSON 之后,我们再来看看什么时候适合使用 JSON。

1) 定义接口

JSON 使用最多的地方莫过于 Web 开发领域了,现在的数据接口基本上都是返回 JSON 格式的数据,比如:

  • 使用 Ajax 异步加载的数据;
  • RPC 远程调用;
  • 前后端分离,后端返回的数据;
  • 开发 API,例如百度、高德的一些开放接口。

这些接口一般都会提供一个接口文档,说明接口调用的方法、需要的参数以及返回数据的介绍等。

2) 序列化

程序在运行时所有的变量都是存储在内存中的,如果程序重启或者服务器宕机,这些数据就会丢失。一般情况下运行时变量并不是很重要,丢了就丢了,但有些数据则需要保存下来,供下次程序启动或其它程序使用。

我们可以将这些数据保存到数据库中,也可以保存到一个文件中,这个将内存中数据保存起来的过程称为序列化。序列化在 Python 中称为 pickling,在其他语言中也被称为 serialization、marshalling、flattening 等等,都是一个意思。

通常情况下,序列化是将程序中的对象直接转换为可保存或者可传输的数据,但这样会保存对象的类型信息,无法做到跨语言使用,例如我们使用 Python 将数据序列化到硬盘,然后使用 Java 来读取这份数据,这时由于不同编程语言的数据类型不同,就会造成读取失败。如果在序列化之前,先将对象信息转换为 JSON 格式,则不会出现此类问题。

3) 生成 Token

Token 的形式多种多样,JSON、字符串、数字等都可以用来生成 Token,JSON 格式的 Token 最有代表性的是 JWT(JSON Web Tokens)。

随着技术的发展,分布式 Web 应用越来越普及,通过 Session 管理用户登录状态的成本越来越高,因此慢慢发展为使用 Token 做登录身份校验,然后通过 Token 去取 Redis 中缓存的用户信息。随着之后 JWT 的出现,校验方式变得更加简单便捷,无需再通过 Redis 缓存,而是直接根据 Token 读取保存的用户信息。

4) 配置文件

我们还可以使用 JSON 来作为程序的配置文件,最具代表型的是 npm(Node.js 的包管理工具)的 package.json 包管理配置文件,如下所示:

{"name": "server","version": "0.0.0","private": true,"main": "server.js","scripts": {"start": "node ./bin/www"},"dependencies": {"cookie-parser": "~1.4.3","debug": "~2.6.9","express": "~4.16.0","http-errors": "~1.6.2","jade": "~1.11.0","morgan": "~1.9.0"}
}

提示:虽然 JSON 可以用来定义配置文件,但由于 JSON 中不能添加注释,使得配置文件的可读性较差。

总结

JSON 是一种轻量级的数据交换格式,它是基于 JavaScript 的一个子集,采用完全独立于编程语言的格式来表示数据,可以跨语言、跨平台使用。简洁清晰的层次结构使得 JSON 逐渐替代了 XML,成为了最理想的数据交换格式,广泛应用于 Web 开发领域。

JSON 是什么?JSON 介绍相关推荐

  1. vue和Java做数据交互_基于vue和springmvc前后端分离,json类接口调用介绍

    基于vue和springmvc前后端分离,json类接口调用介绍 版本要求:spring-3.2.9.RELEASE.vue-2.9.2.axios-0.17.1,其中axios作为http clie ...

  2. Qt中的JSON操作_1: JSON的基本知识介绍(JSON格式、JSON数组、JSON对象、应用场景)

    总结放于前: JSON是一种利用JSON数组和JSON对象描述数据内容的数据格式,采用树状的结构,只能有一个父节点,子节点不设限,但父子节点均为JSON对象或者JSON数组. 1. Json 简介 J ...

  3. Json字符串的格式介绍

    **Json字符串的格式介绍**现在越来越多的项目和开发插件等默认都会支持和使用json数据格式,作为数据保持.传输的一种方式. 说是其中一种,就标示还有好多其他格式.比如:最多是xml.webser ...

  4. c语言json数据转换成字符串,Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)...

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...

  5. Json对象和Json字符串

    JSON对象 有时候在做项目的时候时常将这两个概念弄混淆,尤其是在使用springmvc的时候,后台@RequestBody接受的是一个json格式的字符串,一定是一个字符串.  先介绍一下json对 ...

  6. python中json dumps_python中json.loads,dumps,jsonify使用

    search_info = {'id':132,'user_role':3} print type(search_info) #输出 #转为string用dumps print type(json.d ...

  7. php 1 2 3 转arry_在PHP语言中使用JSON和将json还原成数组的方法

    在之前我写过php返回json数据简单实例,刚刚上网,突然发现一篇文章,也是介绍json的,还挺详细,值得参考.内容如下 从5.2版本开始,PHP原生提供json_encode()和json_deco ...

  8. jq js json 转字符串_JQuery如何把JSON字符串转为JSON对象

    本文介绍JQuery如何把JSON字符串转为JSON对象. HTML代码 下面的HTML代码实现JQuery把JSON字符串转为JSON对象. Name: Age: City: Country: va ...

  9. Newtonsoft.Json.dll 反序列化JSON字符串

    上一篇JSON博客<JSON入门级学习小结--JSON数据结构>中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的: 如今因为项目需求(asp.net web网站,前台向 ...

  10. 【JSON系列】JSON核心知识点总结

    JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更快,更易解析. ...

最新文章

  1. C语言 · 征税程序
  2. mysql 查询多边形_mysql中判断一个点是否在多边形中
  3. 一图看懂py2/py3编码
  4. Hotspot GC Root 对应调用链
  5. 内部属性 聚合_光的本质(用粒子性解释光的所有属性,颜色,介质内速度改变等)...
  6. 设置pandas显示行数_Pandas这样来设置,做数据分析舒适百倍
  7. 【kafka】kafka 消息 重放 从 一个 topic 导入 另外一个 topic
  8. ecshop全套系统测试用例
  9. Webpack SourceMap快速定位错误位置
  10. 10张图带你彻底搞懂限流、熔断、服务降级
  11. 南开大学2019年数学分析考研试题
  12. JAVA百度校招笔试题(含答案、解析)
  13. macf键与功能键切换_功能切换(功能开关或功能标志)与功能分支
  14. 【DS with Python】 Pandas中Series DataFrame的结构、创建、查询、修改语法与实例
  15. POJ 3384 Feng Shui(半平面交)
  16. C++实现FFT代码
  17. ubuntu 钉钉 输入法不能输入中文,只能输入英文。
  18. “仁、义、礼、智、信、忠、孝、节、勇、和”
  19. python教程菜鸟教程学习路线
  20. 施耐德软起故障php,施耐德软启动器排除故障的具体措施和方法

热门文章

  1. Minecraft 1.18.1、1.18.2模组开发 02.方块和物品
  2. 1-5 Minecraft-Forge-1.16.5 Mod的开发(创建属于你的武器与工具)
  3. 给AI新手推荐的十篇最佳数据科学文章
  4. Android 12 行为变更,对应用产生的影响
  5. 小暑将至,这组小暑海报送给你们
  6. 怎么批量设置EDIUS中的图片持续时间
  7. php 各种经典算法
  8. 阿里云产品试用更新,产品组合试用装更划算,快来免费上云吧
  9. hibernate-validate如何校验controller+service+分组校验+自定义注解实现校验规则等
  10. 基于Matlab的三角函数方程组解算方法