json解析总结
json并不从属于javascript,它只是一种数据格式。很多语言都有针对Json的解析器和序列化器。
语法:
1:简单值 5 "Hello" null 布尔值
2:对象(属性的值必须是双引号)
{
"name":"niu",
"age":29,
"school":{"name":"nioumai",
"location":"North Andover"
}
}
3:数组
[
{
"name":"niu",
"age":29,
"school":{"name":"nioumai",
"location":"North Andover"
}
},
{
"name":"niu",
"age":29,
"school":{"name":"nioumai",
"location":"North Andover"
}
}
]
解析与序列化
json另一个流行的原因是可以把json对象结构解析为有用的javascript对象。
<script type="text/javascript">
var book = {
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas"
],
edition: 3,
year: 2011
};
var jsonText = JSON.stringify(book);//把一个javascript对象序列化为一个json字符串注意值为Undefined的任何属性也都会被跳过。
alert(jsonText);
var bookCopy = JSON.parse(jsonText);将json字符串转换为javascript值,虽然book和bookCopy具有相同的属性但他们是独立的如果字符串不是有效的json该方法会
抛出错误。
alert(bookCopy.title);
</script>
序列化选项:
JSON.stringify(js对象,第二个参数(可选),第三个参数(可选))
第一个参数可以是数组也可以是函数,第二个是一个选项表示是否在json字符串中保留缩进。
例子:传数组
<script>
var book = {
title: "Professional JavaScript",
authors: [
"Nicholas C. Zakas"
],
edition: 3,
year: 2011
};
var jsonText = JSON.stringify(book, ["title", "edition"]);
alert(jsonText);将输出:{title: "Professional JavaScript","edition",3}
</script>
例子:传函数
<script>
var book = {
title: "Professional JavaScript",
authors: [
"Nicholas C. Zakas",
"niouxiao"
],
edition: 3,
year: 2011
};
var jsonText = JSON.stringify(book, function(key, value){
switch(key){
case "authors":
return value.join(",") //我们将创建一个数组,然后把它的所有元素放入一个字符串:
case "year":
return 5000;
case "edition":
return undefined;
default:
return value;
}
});
alert(jsonText);//{title: "Professional JavaScript","authors": "Nicholas C. Zakas","year":5000}
</script>
例子:字符串缩进
<script type="text/javascript">
var book = {
title: "Professional JavaScript",
authors: [
"Nicholas C. Zakas"
],
edition: 3,
year: 2011
};
var jsonText = JSON.stringify(book, null, 4); //最大为10 大于10 将变成10 将自动加入换行
//也可以用字符串var jsonText = JSON.stringify(book, null, "--");
alert(jsonText);
</script>
toJson方法:
<script type="text/javascript">
var book = {
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas"
],
edition: 3,
year: 2011,
toJSON: function(){
return this;
}
};
var jsonText = JSON.stringify(book);
alert(jsonText);
</script>