JSON的相关内容

包括:
JSON概述,
JSON语法规则,
使用JSON(JSON对象,JSON数组,JSON文档与对象的转换)
JSON应用
额外内容(PHP输出JSON数据,解析JSON字符串,客户端如何使用服务器JSON输出)


JSON概述:
    JSON:JavaScript Object Notation,JavaScript对象表示法,原本是JavaScript中创建对象的一种语法。
    现在,JSON已经从JavaScript中独立出来,作为一种独立的字符串数据表示法,被Java、C#、C++、PHP、OC等几乎所有主流语言所支持。
   
    JSON作为一种 轻量级的文本数据交换格式,已被广泛使用于 存储和交换文本数据领域,作用域XML类似,但比XML更简洁、更快、更容易解析。

JSON语法规则:
    JSON语法是JavaScript对象表示法语法的子集:
        数据在名称/值对中
        数据由逗号分隔
        花括号保存对象
        方括号保存数组

   JSON数据的基本格式是“名称/值”对
        "age":35  //等价于js语句  age=35
        “名称”应使用 双引号引起来
        “值”可以是如下类型:
            (1)数字(整数或浮点数)
            (2)字符串(使用 双引号
            (3)逻辑值(true或false)
            (4)数组(在方括号中)
            (5)对象(在花括号中)
            (6)null

使用JSON:
    JSON对象:
        JSON字符串可以描述一个对象。具体语法为:
            书写在花括号中。
            可以包含任意多个使用逗号分隔的“名称/值”对。
            “名称”必须使用双引号括起来,值若是字符串也必须使用双引号括起来。
            var jsonTxt='{
                "name":"Tom",
                "age":35,
                "isWorked":true
            }';


    JSON数组:
        JSON字符串还可以描述一个数组,具体语法为:
            书写在方括号中。
            其中可以包含多个值或对象。
            var jsonTxt1= '[10,true,null,{"x":60,"y":30}]';
            var jsonTxt2= '[
                               {"name":"Tom","age":35},
                               {"name":"Joe","age":38},
                         ]'
;

    JSON文档与对象的转换:
        使用eval()函数把一段JSON文本字符串解析为一个JavaScript对象:
            var jsonTxt='{"x":60,"y":30}';
            var jsObj= eval( "("+jsonTxt+ ")");
            把文本放在()中,防止语法错误。
            注意:
            (1)根据eval()的严格语法要求,其接收的参数只能是string类型,而不能是String类型!
            (2)使用eval()将JSON字符串解析为JavaScript对象时,若不添加左右的小括号,则会被解释器理解为一段用大括号包围起来的普通JavaScript代码块,而无法识别为一个对象的声明。


       还可以使用JSON.parse(string)方法来解析JSON字符串得到JavaScript对象:
            var jsonTxt='{"x":60,"y":30}';
            var jsObj= JSON.parse(jsonTxt);

       使用JSON.stringify(jsonObj)方法把JavaScript对象格式化为JSON字符串:
            var jsObj={"x":60,"y":30};
            console.log(typeof JSON.stringify(jsObj));
            IE7-中的JS解释器不支持这两种方法,可以下载json2.js工具解决此问题。

JSON应用:
    使用AJAX解析并返回JSON(比如 级联列表)

额外内容:
PHP输出JSON数据:
    可以使用 json_encode()函数将一个PHP数组或对象等数据编码为一个JSON形式的字符串。
    在向客户端输出JSON字符串数据之前,需向客户端声明Content-Type响应头。

    header('Content-Type:application/json');
    $nameArr = array('King','Scott','Smith');
    $nameStr = json_encode($nameArr);
    echo $nameStr;

    索引数组将被编码为JSON数组。
   
    header('Content-Type:application/json');
    $empArr = array('id'=>7788,'name'=>'Scott','age'=>35);
    $empStr = json_encode($empArr);
    echo $empStr;

    关联数组将被编码为JSON对象

解析JSON字符串:
    对于客户端请求中提交的或者从文件中读取的JSON字符串,可以使用 json_decode()解析为PHP数组或对象。
    /*假设客户端通过表单或AJAX提交了数据
    shoeSizeArr = '[37,39,40,41]' */
    $str = $_REQUEST['shoeSizeArr'];
    $arr = json_decode($str);
    var_dump($arr);

    PS:array(4){
        [0]=>int(37)
        [1]=>int(39)
        [2]=>int(40)
        [3]=>int(41)
    }

    /*假设客户端通过表单或AJAX提交了数据
    queryBook = '{"bname":"java","pdate":2015}' */
    $str = $_REQUEST['queryBook'];
    $obj = json_decode($str);
    var_dump($obj);
    echo $obj->bname;
    echo $obj->pdate;

    PS:object(stdClass)#1 (2){
        ["bname"]=>string(4)"java"
        ["pdate"]=>int(2015)
    }
    PHP中访问对象的成员属性使用->运算符而不是.号

客户端如何使用服务器JSON输出:
    若某个服务器端动态页面声明了响应头 Content-Type:application/json且响应主体是 JSON数组或JSON对象,那么该页面就是一个返回了纯数据的页面,而没有庞杂繁复的HTML标签。这样的页面返回的内容一般在客户端可以做如下用途:
       被客户端AJAX程序解析,动态的显示在DOM树中。
        被Android/iOS App使用,显示在移动应用中。

猜你喜欢

转载自hiuman.iteye.com/blog/2331806