json_encode , json 仍是数组?(转)

在 ajax 横行的今天,json 瓜熟蒂落地成为了先后端交互一个极其重要的工具。对于 PHP 来讲,一般使用 json_encode 方法将一个 PHP 组数,转换成前端能够解析的 json 字符串,这也是 PHP 手册上描述的内容,但事实是这样的吗?看看下面这段代码:前端

$a = array( 'Jack' , 'Sam' , 'Tom' );
    echo json_encode( $a );

当 JavaScript 请求到上面的代码,PHP 将解析数组 $a 为 json 字符串并返回到前端,但事实上在前端拿到的返回结果倒是一个数组。ajax

[ "Jack" ,  "Sam" ,  "Tom" ]

这个结果对于前端来讲也许并非所指望的,对于 JavaScript 来讲,数组和 json 的关系很是密切,甚至能够简单地把 json 理解为关联数组,但这并不意味着两者能够划等号,好比 json 没有 length 属性,也不能进行数字索引,json 是键值对,而 JavaScript 的数组严格说来是没有"键"的,这和 PHP 的差别比较大。那么为何 json_encode 的返回结果是数组呢?json

本文开头的 PHP 代码中的数组是严格意义上的数字索引数组,json_encode 方法在处理这样的数组的时候会返回数组字符串,它须要同时知足两个条件:1. 数字索引数组,2. 索引值从 0 开始。这意味着下面的代码也会返回一样的结果:后端

$b = array(
        '0' => 'Jack',
        '1' => 'Sam',
        '2' => 'Tom'
    );
    echo json_encode( $b );

这两个条件的任意一个没有得到知足,那么 json_encode 方法才真正的返回 json 字符串:数组

$c = array(
        'person-1' => 'Jack',
        'person-2' => 'Sam',
        'person-3' => 'Tom'
    );
    echo json_encode( $c );

这时前端获得的结果以下:工具

{
        'person-1' : 'Jack',
        'person-2' : 'Sam',
        'person-3' : 'Tom'
    };

这篇文章主要是说明 json_encode 使用时一个须要注意的细节,不管返回的是数组仍是 json,都不表明这必定就是个错误的返回结果,当前端须要的数组时,数组就是正确的结果,反之亦然。code

相关文章
相关标签/搜索