JSON是Javascript Object Notation,意为Javascript对象表示法。它是javascript的严格子集。它是一种数据格式,并不是一种编程语言。但JSON并不从属于JavaScript,它具有很强的跨平台性。
JSON可以表示字符串,数值,布尔值,和Null,但无法表示JS的特殊值undefined。还可以表示对象和数组。
数字:直接用数字表示。如2
字符串:必须使用双引号。如
"name"
对象:直接用数字表示。
JS对象
var person = { name: '麦兜', age: 3 };
JS的另一种表示
var person = { "name": "麦兜", "age": 3 };
JSON表示
{ "name": "麦兜", "age": 3 }
区别:JSON对象没有声明变量,在对象的末尾没有分号。
JSON对象的复杂表示
{ "name": "麦兜", "age": 3, "school": { "name": "春田花花幼稚园", "location": "HONGKONG" } }
数组
JS数组的字面量表示
var arr = [3, '麦兜', true];
JSON一维数组
[3, "麦兜", true]
JSON二维数组
[[3, "麦兜", true], [5, "加菲猫", false]]
更复杂的JSON数据
[
{
"title": "平凡的世界",
"author": [
"路遥"
],
"edition": 3,
"year": 1987
},
{
"title": "百年孤独",
"author": [
"加西亚·马尔克斯"
],
"edition": 2,
"year": 1907
},
{
"title": "世界通史",
"author": [
"不详"
],
"edition": 2,
"year": 1999
}
]
支持JSON的语言基本都提供了能够解析JSON和序列化。
JS中的JSON
有两个方法,stringify()
和parse()
JSON.stringify()
用于将JS对象序列化为JSONJSON.parse()
用于将JSON字符串解析为原生JS值
stringify方法:
语法:
JSON.stringify(value[, replacer[, space]])
- value 需要序列化的js对象
- replacer 可选。它是一个过滤器,可以是函数,也可以是数组。使用函数时,接收两个参数,一个是属性一个是属性值,也就是键和值。使用函数的返回值作为需要转换的属性的属性值,如果返回undefine,则排除这个值。如果是一个数组,那么只转换该数组中所具有的键值的值。
- space 可选。表示是否为文本添加缩进。如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 有可以使用非数字,如:
\t
。
parse方法:
语法:
JSON.parse(value[, reviver])
- value JSON对象
- reviver 可选。还原函数
PHP中的JSON
序列化json_encode
、解析json_decode
json_encode语法
string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )
- value 需要转换的数据。但不能为resouce类型。所有字符串数据的编码必须是 UTF-8。
- $options 可选。一些配置常量
- depth 可选。设置最大深度。 必须大于0。
json_decode语法
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
- $json json字符串
- assoc 设置为true时返回一个数组。若不设置将返回一个对象。
- depth 指定递归深度
- options JSON解码的掩码选项。JSON解码的掩码选项。 现在有两个支持的选项。 第一个是JSON_BIGINT_AS_STRING, 用于将大整数转为字符串而非默认的float类型。第二个是 JSON_OBJECT_AS_ARRAY, 与将assoc设置为 TRUE 有相同的效果。
JSON实例
html
<form>
<p>
<label>用户名</label>
<input type="text" name="" id="username">
</p>
<p>
<label>密码</label>
<input type="password" name="" id="password">
</p>
<p>
<label>电话</label>
<input type="text" name="" id="telephone">
</p>
<p>
<input type="submit" name="" id="submit" value="提交">
</p>
</form>
JS
$(document).ready(function(){
$('#submit').on('click',function(){
var username = $('#username').val();
var psw = $('#password').val();
var tel = $('#telephone').val();
$.ajax({
url: '../form.php',
type: 'POST',
data: {
username: username,
password: psw,
telephone: tel
},
success: function(response){
var arr = $.parseJSON(response); //将收到的json字符串转为对象
console.log(arr);
}
})
.done(function() {
console.log("success");
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
});
});
PHP
<?php
header('Content-type:text/html;charset:utf-8');
$username = $_POST['username'];
$password = $_POST['password'];
$telephone = $_POST['telephone'];
$arr = array(
'username' => $username,
'password' => $password,
'telephone' => $telephone
);
$json = json_encode($arr); //生成一个json对象
echo $json; //返回这个json
?>