JSON 值
JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在中括号中)
- 对象(在大括号中)
- null
JSON 文件
JSON 文件的文件类型是 ".json"
JSON 文本的 MIME 类型是 "application/json"
规则
- 对象和数组
- 属性名称必须是双引号括起来的字符串
- 最后一个属性后不能有逗号
- 数值
- 禁止出现前导零( JSON.stringify 方法自动忽略前导零,而在 JSON.parse 方法中将会抛出 SyntaxError)
- 如果有小数点, 则后面至少跟着一位数字
- 字符串
- 字符串必须用双引号括起来
方法
JSON.stringify
JSON.stringify(value[, replacer[, space]])
replacer:
可选。用于转换结果的函数或数组。
var str = {"name":"haha", "age":20};
JSON.stringify(str); // {"name":"haha","age":20}
作为函数,它有两个参数,键(key)值(value)都会被序列化。
过滤函数以对象中的每一个属性和值作为输入,返回值有以下几种情况:
- 如果返回一个 Number, 转换成相应的字符串被添加入JSON字符串。
- 如果返回一个 String, 该字符串作为属性值被添加入JSON。
- 如果返回一个 Boolean, "true" 或者 "false"被作为属性值被添加入JSON字符串
- 返回undefined表示忽略该属性
- 返回对象将会触发递归调用知道遇到基本类型的属性
- 返回无法stringify的值将会被忽略
JSON.stringify(str, function(key, val){
console.log("key is ", key);
console.log("val is ", typeof(val));
return val;
}
//======================
key is
val is object
key is name
val is string
key is age
val is number
// {"name":"haha","age":20}
function replacer(key, value) {
if (typeof value === "string") {
return undefined;
}
return value;
}
var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
var jsonString = JSON.stringify(foo, replacer);
// {"week":45,"month":7}
如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。
JSON.stringify(str, ["name", "haha", "kk"]);
// {"name":"haha"}
space:
可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:t。
JSON.stringify(str, null, 4);
//
{
"name": "haha",
"age": 20
}
toJSON()
如果一个被序列化的对象拥有 toJSON 方法,那么该 toJSON 方法就会覆盖该对象默认的序列化行为。
var data = {
name:"niuzai",
info:{
age:18,
sex:"male"
},
toJSON:function(){
return "by toJSON";
}
};
JSON.stringify(data);
//""by toJSON"";
JSON.parse()
JSON.parse(text[, reviver])
reviver:
可选,一个函数,它用来转换已经被从text字符串转为对象的对象,规则如下:
- 如果reviver返回一个有效值,则对应的属性值将替换为转换后的值。
- 如果reviver返回它接收的相同值,则不修改对应属性值。
- 如果reviver返回undefined,则删除对应的属性
function reviver(key,value){
if(key=="webName"){
return "antzone";
}
return value;
}
var jsonStr='{"webName":"蚂蚁部落","url":"softwhy.com","age":"2"}';
var obj=JSON.parse(jsonStr,reviver);
console.log(obj);
//
{
age: "2",
url: "softwhy.com",
webName: "antzone"
}