前言
JSON其实就是一种数据的表示格式,由于其自身的优点(XML衬托)而广泛用于前后端的文本数据交互。这里又大概能够窥见XML与JSON的暗流涌动,一如前述JSP的落寞,但不至于那么惨烈。目前XML格式的文件还广泛作为配置文件的格式存在,尽管.yml
、.properties
、.json
文件也在某些地方作为配置文件的格式。
细想起来,无非也就是一种数据格式。编程圈里可能有很多“取代”这一说法,我并不十分认同,每种技术点自然有其存在的环境与背景,适时的发挥作用罢了。但技术的向前发展进步,是毋庸置疑的,所以我也不会无聊地选择用XML来做文本数据传输。突然想到,HTML的标签语法,是不是也存在着标签增加网络传输流量这一说法?又或者从JSON的命名看,是否前端巨头JavaScript就捧红了JSON呢?当然这是无端的幻想,技术时时刻刻都在迭代,我们唯有跟着大浪而已。
Json简介
JSON 是存储和交换文本信息的语法。类似 XML。JSON 比 XML 更小、更快,更易解析。
- JSON 指的是 JavaScript 对象表示法
JavaScript Object Notation
- JSON 是轻量级的文本数据交换格式
- JSON 独立于语言
- JSON 具有自我描述性,更易理解
JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言(PHP、Java、Python中均可以使用JSON)。
JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。
注:JSON常用于前后端的数据交互(前端Ajax上传JSON数据,服务器返回JSON字符串),需要明确是文本数据,类似图片文件等不能通过JSON来传输。
Json数据
通过Js语法声明并初始化JSON对象,可以是单个JSON对象,也可以是JSON数组。
var JSONObject= { |
语法
- 数据在名称/值对中(双引号)
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
Json数据值
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
注: Js的数据类型一般为6种,其中基本数据类型:字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined),引用数据类型:对象(Object),ES6中新增Symbol(独一无二的值)。可以通过 typeof 查看变量类型,数组(Array)返回object类型,函数(Function)返回function类型。
Json基本用法
把 JSON 文本转换为 JavaScript 对象
JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。
<html> |
JSON解析器
eval() 函数可编译并执行任何 JavaScript 代码。
使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。
在浏览器中,这提供了原生的 JSON 支持,而且 JSON 解析器的速度更快。
Json应用示例
从前端的视角来解读JSON用法,包括如何将服务端的JSON字符串解析为JSON对象,以及如何将JSON对象转换为JSON字符串传递给服务端。
JSON.parse()
JSON 通常用于与服务端交换数据。前端接收服务器数据时一般是获得字符串。
我们可以使用 JSON.parse() 方法将JSON字符串数据转换为 JavaScript 对象。
语法:JSON.parse(text, [reviver])
reviver: 一个转换结果的函数, 将为对象的每个成员调用此函数。
- 从服务端接收json数据
- 从服务端接收数组的json数据
- 解析日期
- 解析函数(将函数作为字符串存储,不建议在json中使用函数)
|
JSON.stringify()
JSON 通常用于与服务端交换数据。在向服务器发送数据时一般是字符串。
我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。
|
Java中使用JSON
Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。常用的如Gson、FastJson、Jackson。
编码:从Java变量到JSON格式的编码
//以FastJson为例 |
解码:从 JSON 对象到 Java 变量的解码过程
public void testJson2() { |
JSON对象与字符串的相互转化
//从字符串解析JSON对象 |