JSON(JavaScript Object Notation)是表示便于许多编程语言读写的数据结构的一种轻型方式。这使JSON(类似于XML)成为各种语言编写的应用程序之间(例如服务器端PHP 和客户端JavaScript)一种有效的数据交换格式。JSON 比 XML 更小、更快,更易解析。
虽然它基于JavaScript的对象字面量表示法,但是它与语言却是无关的,这里说的无关意思是说没有依赖关系,不是说只有在JavaScript中才能用,在别的语言中也是可以用的。
JSON 的工作原理
JSON 合并了 JavaScript 语法中表示 数组 和 对象 的两个方面,来表示数据结构。
1)使用方括号[ ]表示简单数组:
[ "item1", "item2", "item3" ]
2)使用花括号{ }表示对象和复合数组:
{ "key": "value" }
使用这两种方式,可以用于记录(带命名的或数值的索引键)描述许多数据结构:
var oNovelist = {
"first-name": "Joana",
"lastName": "Russ",
"novels": [
{ "title": "And Choas Died", "year": "1970" },
{ "title": "The Female Man", "year": "1975" }
]
}
注意:使用句点记号时,不能包含连字符、句点和其他合法键值的字符。
console.log(oNovelist['first-name']); // this works
console.log(oNovelist.first-name); // error!
运行效果图如下:
JSON 数据类型
有 6 种类型的数据可以用作 JSON 值:
- 数组(一系列有序的值,用逗号隔开,放在方括号中)
- 对象(键:值对的集合,用逗号隔开,放在花括号中)
- 字符串(0个或多个 Unicode 字符的集合,放在双引号中,双引号使用反斜杠转义)
- 数值(整数或实数,不使用8进制和16进制格式)
- 布尔值(true 或 false)
- null
JSON 字符串转换为 JSON 对象
使用 JSON.parse(string, translator)
string 参数是要转换为对象的 JSON 字符串
JSON 对象转换为 JSON 字符串
使用 JSON.stringify(object, replacer, space)
object 参数是要转换为字符串的 JSON 对象
replacer 参数(可选)
space 参数(可选),文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 可以使用非数字,如:\t
eval() 陷阱
eval() 函数可编译并执行任何 JavaScript 代码。这隐藏了一个潜在的安全问题。当使用 eval() 将JSON数据从字符串转换为对象时,就可以在没有得到页面作者的脚本许可的情况下执行 JavaScript 代码。
使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。
前端向后台传递的是 >>> JSON形式的字符串
第一种方案:拼接JSON字符串(键值都得用双引号,最外层用单引号,格式严格,容易拼错)
var data = '{"name": "'+name+'", "password": "'+password+'"}';
第二种方案:将JSON对象序列化为JSON字符串(简洁明了)
var data = {
"name": name,
"password": password
}
var data= JSON.stringify(data);