概述
JSON,JavaScript Object Notation,是一种共享数据的格式。
顾名思义,JSON源自JavaScript编程语言,但可用于多种语言,包括Python,Ruby,PHP和Java。
JSON类似XML,只是一种显示数据的格式,要对数据进行操作的时候,需要把JSON数据转为其他格式。
JSON使用.json作为文件扩展名。当以其他文件格式(如.html)定义时,它可以作为JSON字符串出现在引号内,也可以是分配给变量的对象。此格式易于在Web服务器与客户端或浏览器之间传输。
用于序列化对象,数组,数值,布尔值或者null。一个JSON对象由一系列的key:value
组成,并由{}
包裹,key必须为字符串,且由双引号
包裹。
{ "first_name" : "Sammy", "last_name": "Shark", "online" : true, }
JSON = null
or true or false
or JSONNumber
or JSONString
or JSONObject
or JSONArray
用于
存储数据
根据用户输入生成数据结构
客户端服务器间的数据传输
配置和验证数据
parse与stringify
包含两个方法
JSON.parse
将字符串解析为JSON对象JSON.stringify
将JSON对象转换为字符串
var obj = {"first_name" : "Sammy", "last_name" : "Shark", "location" : "Ocean"}
var s = JSON.stringify(obj)
//s = '{"first_name" : "Sammy", "last_name" : "Shark", "location" : "Ocean"}'
var o = JSON.parse(s)
除此之外也可以使用eval
,解析 JSON 文本,然后生成 JavaScript 对象(但是还是推荐parse)。必须把文本包围在括号中,这样才能避免语法错误:
var obj = eval ("(" + txt + ")");
一个JSON对象实例如下
{
"squadName" : "Super hero squad",
"homeTown" : "Metro City",
"formed" : 2016,
"secretBase" : "Super tower",
"active" : true,
"members" : [
{
"name" : "Molecule Man",
"age" : 29,
"secretIdentity" : "Dan Jukes",
"powers" : [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
},
{
"name" : "Madame Uppercut",
"age" : 39,
"secretIdentity" : "Jane Wilson",
"powers" : [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
},
{
"name" : "Eternal Flame",
"age" : 1000000,
"secretIdentity" : "Unknown",
"powers" : [
"Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"
]
}
]
}
访问属性值
访问JSON对象的属性值可以通过superHeroes.hometown
或superHeroes["active"]
JSON同样支持链式访问superHeroes["members"][1]["powers"][2]
与JavaScript对象比较
//JS对象
var user = {
first_name: "Sammy",
last_name : "Shark",
online : true,
full_name : function() {
return this.first_name + " " + this.last_name;
}
};
//user.first_name
//user.full_name()
//JSON对象
var sammy = {
"first_name" : "Sammy",
"last_name" : "Shark",
"online" : true
}
//sammy.first_name
//sammy.last_name
//sammy.online
-
JSON可被任何编程语言使用,而JavaScript对象只能通过JavaScript编程语言直接使用。
-
语法方面,JavaScript对象类似于JSON,但是JavaScript对象中的key没有引号。而且,JavaScript对象在传递给值的类型方面受到的限制较少,可以将函数用作值。