最近听了很多技术分享,发现好多时候数据的结构都是json的格式,小编一直不理解,下面就来总结一下
什么是 JSON ?
JSON 指的是JavaScript 对象表示法(JavaScript Object Notation)
JSON 是轻量级的文本数据交换格式
JSON 独立于语言 *
JSON 具有自我描述性,更易理解
* JSON 使用 JavaScript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。
JSON - 转换为JavaScript 对象
JSON 文本格式在语法上与创建JavaScript 对象的代码相同。
由于这种相似性,无需解析器,JavaScript程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。
JSON语法
JSON 语法是JavaScript 语法的子集。JSON 语法是 JavaScript 对象表示法语法的子集。
数据在键/值对中
数据由逗号分隔
花括号保存对象
方括号保存数组
JSON 名称/值对
JSON 数据的书写格式是:键/值对。
键/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"name": "薛宇"
这很容易理解,等价于这条JavaScript 语句:
name = "薛宇"
JSON 值
JSON 值可以是:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在方括号中)
对象(在花括号中)
Null
JSON 对象
JSON 对象在花括号中书写:
对象可以包含多个名称/值对:
{
"name": "鹿晗",
"age": 26,
"birthday": "1990年4月20日",
}
这一点也容易理解,与这条JavaScript 语句等价:
name = "鹿晗";
age = 26;
birthday ="1990年4月20日";
JSON 数组
JSON 数组在方括号中书写:
数组可包含多个对象:
{
"star_male": [
{
"name": "鹿晗",
"age": "26"
},
{
"nickname": "李易峰",
"age": "29"
},
{
"nickname": "陈赫",
"lastName":"31"
}
]
}
在上面的例子中,对象"star_male" 是包含三个对象的数组。每个对象代表一条关于一个明星(姓名和年龄)的记录。
JSON 使用 JavaScript语法
因为 JSON 使用 JavaScript语法,所以无需额外的软件就能处理 JavaScript 中的 JSON。
通过 JavaScript,您可以创建一个对象数组,并像这样进行赋值:
例子
var star_male= [
{
"name": "鹿晗",
"age": "26"
},
{
"nickname": "李易峰",
"age": "29"
},
{
"nickname": "陈赫",
"lastName": "31"
}
]
可以像这样访问 JavaScript 对象数组中的第一项(鹿晗):
var name =star_male[0].name;
alert(name);
由此我们得到的name是:
鹿晗
我们试着这样修改数据取得鹿晗的age:
var age =star_male[0].age;
alert("age:" +age);
JSON 使用
把 JSON 文本转换为JavaScript 对象
JSON 最常见的用法之一,是从web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。
JSON 实例 - 来自字符串的对象
创建包含 JSON 语法的JavaScript 字符串:
var txtJson = '{"star_male" : [' +
'{"name":"鹿晗" , "age":26 },' +
'{"name":"李易峰" , "age":29 },' +
'{"name":"陈赫" , "age":31 } ]}';
由于 JSON 语法是JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。
eval() 函数使用的是JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:
var obj = eval("(" + txtJson + ")");
例子
JSON 值可以是:
var txtJson = '{"star_male" : [' +
'{ "name":"鹿晗" ,"age":26 },' +
'{"name":"李易峰" , "age":29 },' +
'{"name":"陈赫" , "age":31 } ]}';
//利用函数 eval() 转换成JSON对象
var obj = eval("(" + txtJson + ")");
//输出数组的第一个对象的name值
alert("得到的值:" +obj.star_male[0].name);
JSON 解析器
提示:eval() 函数可编译并执行任何JavaScript 代码。这隐藏了一个潜在的安全问题。
使用 JSON 解析器将 JSON 转换为JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。
在浏览器中,这提供了原生的 JSON 支持,而且 JSON 解析器的速度更快。
严重:JSON 解析器 eval() 安全问题说明
大家都知道eval()函数就是evaluation:
它的特点如果遇到运算符(/、*、-、+、>>等),它会直接计算结果,下面我们来看 一个Demo
假如鹿晗有一张CD,name为“20-11”。
var txtJson ='{' +
'"name": "鹿晗",' +
'"cd_name": 26-11' +
'}';
//利用函数 eval() 转换成JSON对象
var obj = eval("(" + txtJson + ")");
//输出cd_name
alert("cd_name:" +obj.cd_name);
运行一下,你会惊讶的发现,结果为:
cd_name:15
结果为:26 - 11 = 15;
结论:得出的结果如果字符串里含有运算符,那么用 eval()不安全,它的结果是运算后的结果。
以上就是我对JSON的总结了,代码都可以试试去运行哦,很容易理解的。