美文网首页
php操作json

php操作json

作者: 零一间 | 来源:发表于2017-09-29 13:14 被阅读168次

    什么是JSON

    • 1 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
    • 2 很容易的进行阅读和编写。
    • 3 方便了机器进行解析和生成。
    • 4 采用完全独立于程序语言的文本格式。

    JSON基于两种结构

    json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构。

    对象:

    对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构。

    数组:

    数组在js中是中括号“[]”括起来的内容,数据结构为["java","javascript","php",...]。

    “名称/值”对的集合(A collection of name/value pairs)。不同的编程语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)

    值的有序列表(An ordered list of values)。在大部分语言中,它被实现为数组(array),矢量(vector),列表(list),序列(sequence)

    体现形式

    对象(object) 是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

    数组(array) 是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

    值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

    字符串(string) 是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。

    JSON的数值没有使用八进制与十六进制格式。

    可以在任意标记之间添加空白。

    PHP对变量进行 JSON 编码

    函数:json_encode()

    普通方式:

    $arr = [
        'a' => 1,
        'b' => 2,
        'c' => 3,
        'd' => 4,
        'e' => 5
    ];
    echo json_encode($arr);
    

    对象转json:

    $obj = new StdClass();
    $obj->body = 'another post';
    $obj->id = 21;
    $obj->approved = true;
    $obj->favorite_count = 1;
    $obj->status = null;
    echo json_encode($obj);
    // {"body":"another post","id":21,"approved":true,"favorite_count":1,"status":null}
    

    数组转对象:

    PHP 5.3.3 +

    $arr = [
        1,
        2,
        3
    ];
    echo json_encode($arr);
    // [1,2,3]
    echo json_encode((object)$arr);
    // {"0":1,"1":2,"2":3}
    echo json_encode($arr, JSON_FORCE_OBJECT);
    // {"0":1,"1":2,"2":3}
    

    输出中文JSON:

    以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 PHP 5.4.0 +

    $arr = [
        '张三',
        '李四',
        '王五'
    ];
    echo json_encode($arr);
    // ["\u5f20\u4e09","\u674e\u56db","\u738b\u4e94"]
    echo json_encode($arr, JSON_UNESCAPED_UNICODE);
    // ["张三","李四","王五"]
    

    输出中文JSON对象

    //中文,json对象
    $arr = [
        '张三',
        '李四',
        '王五'
    ];
    echo json_encode($arr);
    // ["\u5f20\u4e09","\u674e\u56db","\u738b\u4e94"]
    echo json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT);
    // {"0":"张三","1":"李四","2":"王五"}
    

    浮点值类型保持:

    $arr = [
        12.3,
        99.99,
        100.0
    ];
    echo json_encode($arr);
    // [12.3,99.99,100]
    echo json_encode($arr, JSON_PRESERVE_ZERO_FRACTION);
    // [12.3,99.99,100.0]
    

    其他的掩码:

    JSON_HEX_TAG (integer)
    所有的 < 和 > 转换成 \u003C 和 \u003E。  PHP 5.3.0 +
    JSON_HEX_AMP (integer)
    所有的 & 转换成 \u0026。 PHP 5.3.0 +
    JSON_HEX_APOS (integer)
    所有的 ' 转换成 \u0027。 PHP 5.3.0 +
    JSON_HEX_QUOT (integer)
    所有的 " 转换成 \u0022。 PHP 5.3.0 +
    JSON_NUMERIC_CHECK (integer)
    将所有数字字符串编码成数字(numbers)。 PHP 5.3.3 +
    ...
    

    服务端代码

    输出JSON到JavaScript程序;

    header('Content-type:text/json');  
    或者
    header('content-type:application/json;charset=utf8');    
    

    服务端设置 header 头允许AJAX跨域:

    header('Content-Type: text/javascript; charset=utf8');
    //如果需要设置允许所有域名发起的跨域请求,可以使用通配符 *
    header('Access-Control-Allow-Origin: http://www.test.com/');
    //表明该响应的有效时间为 86400 秒,也就是 24 小时。
    header('Access-Control-Max-Age: 86400 ');
    //服务器允许客户端使用指定方法发起请求
    header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
    

    JSON验证:

    function isValidJson($strJson) { 
        json_decode($strJson); 
        return (json_last_error() === JSON_ERROR_NONE); 
    } 
    

    json解码:

    函数:json_decode()

    解码json:

    $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
    
    //解码json
    var_dump(json_decode($json));
    /*
    object(stdClass)[1]
      public 'a' => int 1
      public 'b' => int 2
      public 'c' => int 3
      public 'd' => int 4
      public 'e' => int 5
    */
    

    解码为数组:

    $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
    
    //转成数组
    var_dump(json_decode($json, true));
    /*
    array (size=5)
      'a' => int 1
      'b' => int 2
      'c' => int 3
      'd' => int 4
      'e' => int 5
     */
    

    大整型数值:

    JSON_BIGINT_AS_STRING, 用于将大整数转为字符串而非默认的float类型。

    $json = '{"number": 12345678901234567890}';
    print_r(json_decode($json));
    /*
     stdClass Object
    (
        [number] => 1.2345678901235E+19
    )
     */
    
    print_r(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));
    /*
    stdClass Object
    (
        [number] => 12345678901234567890
    )
     */

    相关文章

      网友评论

          本文标题:php操作json

          本文链接:https://www.haomeiwen.com/subject/huliextx.html