zoukankan      html  css  js  c++  java
  • PHP 与 JSON

    Ref:

    2.  《在PHP语言中使用JSON》 http://www.ruanyifeng.com/blog/2011/01/json_in_php.html
     
    1. 基本数据类型
    从结构上看,所有的数据(data)最终都可以分解成三种类型:
    1. 标量(scalar):一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。
    2. 序列(sequence):若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"。
    3. 映射(mapping):所谓的键值对(key/value),又称作散列(hash)或字典(dictionary),比如"首都:北京"。
     
    2. 对JSON而言,基础数据类型和数组、对象的关系是什么?
    先看看 JSON 的语法:
    1) 并列的数据之间用逗号(",")分隔。 sequence
    2) 映射用冒号(":")表示。                 mapping
    3) 并列数据的集合(数组)用方括号("[]")表示。 array = [sequece1, sequece2, ..... sequeceN]
    4) 映射的集合(对象)用大括号("{}")表示。    object = '{ "ka" : va, "kb" : vb, .... "kN" : vN}'
     
    举例如下:
    [
      {"城市":"北京","面积":16800,"人口":1600},
      {"城市":"上海","面积":6400,"人口":1800}
    ]
     
    JSON 是什么? 一种数据交换格式
    JSON 用在哪儿? 前端和后台交互数据,前端用Javascript,后台用PHP。而Javascript和PHP对数组的定义不一致,具体表现在:
    在Javascript语言中,关联数组就是对象,对象就是关联数组。在php中,关联数组也是数组。
     
    比较两段代码:
    var a=[1,2,3,4];
    a['foo']='Hello World';
    alert(a.length); // 4
     
    <?php
    $a=array(1,2,3,4);
    $a["foo"]="Hello world";
    echo count($a);    // 5
    ?>
     
    3. PHP中JSON相关函数
    从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码。
    json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。当中文使用GB2312编码,或者外文使用ISO-8859-1编码的时候,这一点要特别注意。
     
    PHP中索引数组和关联数组在 json_encode 后的结果。
     
    先看索引数组:
    $arr = Array('one', 'two', 'three');
    echo json_encode($arr); //["one","two","three"]
     
    再看关联数组:
    $arr = Array('1'=>'one', '2'=>'two', '3'=>'three');
    echo json_encode($arr);    //{"1":"one","2":"two","3":"three"}
     
    4. json_decode()的常见错误
    $bad_json = "{ 'bar': 'baz' }";
    $bad_json = '{ bar: "baz" }';
    $bad_json = '{ "bar": "baz", }';
     
    1) 所有的key必须用双引号 "bar"
    2) 最后一个值后不能有逗号
    3) 所有的分隔符都应该是双引号 "baz"
     
    另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。
     
    var_dump(json_decode("Hello World")); //null
  • 相关阅读:
    python note 30 断点续传
    python note 29 线程创建
    python note 28 socketserver
    python note 27 粘包
    python note 26 socket
    python note 25 约束
    Sed 用法
    python note 24 反射
    python note 23 组合
    python note 22 面向对象成员
  • 原文地址:https://www.cnblogs.com/handt/p/2831698.html
Copyright © 2011-2022 走看看