标签:
JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级的数据交换格式,它基于js字面量表示法,是js的一个子集。虽然是一个js的子集但是他与语言无关,它可以用于在现在所有的编程语言编写的应用程序之间进行数据交换。是一种文本格式,比较容易读写。
json是一个容纳“名/值”对的无序集合,名字可以是任意字符串,值可以使任意的json类型的值。大多数编程语言都有被映射为json的数据类型,比 如对象(object),字典(dictionary),哈希表(hash map),关联数组(associative array)等。
console.log(JSON.parse(‘5‘)); // 5 console.log(JSON.parse(5)); // 5 console.log(JSON.parse(‘true‘)); // true console.log(JSON.parse(true)); // true console.log(JSON.parse(‘"hello"‘)); // "hello" console.log(JSON.parse("hello")); // 报错 因为hello不是JSON字符串 console.log(JSON.parse(‘null‘)); // null console.log(JSON.parse(null)); // null console.log(JSON.parse(undefined)); // 报错 因为JSON不能表示undefined换用null代替
{
key1:value1,
key2:value2,
...
}
例如:
{ "name": "hum", "age": 26, "sex": 1, "love": [ "swing", "jump" ], "birthday": "1988-01-12" }
NOTE:
在js中表示JSON字符串时最好在外面加上单引号。
如下:
console.log(JSON.parse(‘{"num":5,"stop":true,"str":"hello","empty":null}‘));// object{num:5,stop:true,str:"hello",empty: null}
与js对象字面量相比,JSON对象没有变量声明也没有末尾的分号。
数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成,语法结构如代码。
[
{
key1:value1,
key2:value2,
...
}
]
例如:
[ { "Id": 7, "Mentions": [ { "Id": 5, "StatusId": 34, "CreatedDateTime":"\/Date(1310051914617+0100)\/", "Text":"Text", "UserName":"Username", "UserLocation":"UK", "UserLanguage":"en-GB", "IsCheckIn":"true" } ], "Checkins": 0, "HereNow": 0, "TimeStamp":"\/Date(1310051914639+0100)\/", "Venue": { "Id": 7, "FoursquareId":"cacbf3bd-f0aa-403d-9f9b-2056b4985ba1", "Name":"Venue Name" } }, { "name":"hahahhahah", "port":[ { "port": 8080, "protocol":"HTTP", "IP":"123.12.06.456" } ] } ]
JSON数组采用的是javascript数组字面量的形式。
var oJson = { name: ‘hum‘, age: 20, sex: 1}; console.log(JSON.stringify(oJson, [‘age‘, ‘sex‘])); // {"age":20,"sex":1}
var oJson = { name: ‘hum‘, age: 26, sex: 1, love: [‘swing‘, ‘jump‘]}; console.log(JSON.stringify(oJson, function(k, v){ switch (k){ case ‘age‘: return v > 20 ? ‘成年‘: ‘未成年‘; case ‘love‘: return v.join(‘,‘); case ‘sex‘: return undefined; default : return v; } })); // {"name":"hum","age":"成年","love":"swing,jump"}
如果该参数是函数,则它是一个替换函数,该函数会在每一个需要字符串化的对象上调用。这个函数的第一个参数是该对象中的属性名或数组的序号,第二个则是值本身。函数的返回值会替换掉需要字符串化的值,如果函数返回undefined或没有任何的返回值,则会在字符串化的时候忽略这个值。
stringify的第三个参数的实例:
var oJson = { name: ‘hum‘, age: 26, sex: 1, love: [‘swing‘, ‘jump‘]}; console.log(JSON.stringify(oJson, null, 4)); /* { "name": "hum", "age": 26, "sex": 1, "love": [ "swing", "jump" ] } */
var oJson = { name: ‘hum‘, age: 26, sex: 1, love: [‘swing‘, ‘jump‘]}; console.log(JSON.stringify(oJson, null, ‘--‘)); /* { --"name": "hum", --"age": 26, --"sex": 1, --"love": [ ----"swing", ----"jump" --] } */
这样就很容易理解了。。。
var oJson = { name: ‘hum‘, age: 26, sex: 1, love: [‘swing‘, ‘jump‘], birthday: ‘1988-01-12‘}; var sJson = JSON.stringify(oJson); console.log(sJson);//{"name":"hum","age":26,"sex":1,"love":["swing","jump"],"birthday":"1988-01-12"} console.log(JSON.parse(sJson)); console.log(JSON.parse(sJson, function (k, v) { if(k == ‘birthday‘){ // 返回日期对象 return new Date(v); }else if(k == ‘sex‘){ // sex不在了 return undefined; }else{ return v; } }));
标签:
原文地址:http://www.cnblogs.com/duhuo/p/4526538.html