国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > PHP > 正文

php json_encode與json_encode的方法

2020-03-22 20:27:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  • 一、json_encode()
    函數(shù)主要用來(lái)將數(shù)組和對(duì)象,轉(zhuǎn)換為json格式。先看一個(gè)數(shù)組轉(zhuǎn)換的例子:
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
    echo json_encode($arr);
    結(jié)果為
    {"a":1,"b":2,"c":3,"d":4,"e":5}
    再看一個(gè)對(duì)象轉(zhuǎn)換的例子:
    $obj->body = 'another post';
    $obj->id = 21;
    $obj->approved = true;
    $obj->favorite_count = 1;
    $obj->status = NULL;
    echo json_encode($obj);
    結(jié)果為
    {"body":"another post",
    "id":21,
    "approved":true,
    "favorite_count":1,
    "status":null}
    由于json只接受utf-8編碼的字符,所以json_encode()的參數(shù)必須是utf-8編碼,否則會(huì)得到空字符或者null。當(dāng)中文使用GB2312編碼,或者外文使用ISO-8859-1編碼的時(shí)候,這一點(diǎn)要特別注意。
    二、索引數(shù)組和關(guān)聯(lián)數(shù)組
    PHP支持兩種數(shù)組,一種是只保存"值"(html' target='_blank'>value)的索引數(shù)組(indexed array),另一種是保存"名值對(duì)"(name/value)的關(guān)聯(lián)數(shù)組(associative array)。
    由于javascript不支持關(guān)聯(lián)數(shù)組,所以json_encode()只將索引數(shù)組(indexed array)轉(zhuǎn)為數(shù)組格式,而將關(guān)聯(lián)數(shù)組(associative array)轉(zhuǎn)為對(duì)象格式。
    比如,現(xiàn)在有一個(gè)索引數(shù)組
    $arr = Array('one', 'two', 'three');
    echo json_encode($arr);
    結(jié)果為:
    ["one","two","three"]
    如果將它改為關(guān)聯(lián)數(shù)組:
    $arr = Array('1'=>'one', '2'=>'two', '3'=>'three');
    echo json_encode($arr);
    結(jié)果就變了:
    {"1":"one","2":"two","3":"three"}
    注意,數(shù)據(jù)格式從"[]"(數(shù)組)變成了"{}"(對(duì)象)。
    如果你需要將"索引數(shù)組"強(qiáng)制轉(zhuǎn)化成"對(duì)象",可以這樣寫
    json_encode( (object)$arr );
    或者
    json_encode ( $arr, JSON_FORCE_OBJECT );
    三、類(class)的轉(zhuǎn)換
    下面是一個(gè)PHP的類:
    class Foo {
    const ERROR_CODE = '404';
    public $public_ex = 'this is public';
    private $private_ex = 'this is private!';
    protected $protected_ex = 'this should be protected';

    public function getErrorCode() {
    return self::ERROR_CODE;
    }
    }
    現(xiàn)在,對(duì)這個(gè)類的實(shí)例進(jìn)行json轉(zhuǎn)換:
    $foo = new Foo;
    $foo_json = json_encode($foo);
    echo $foo_json;
    輸出結(jié)果是
    {"public_ex":"this is public"}
    可以看到,除了公開變量(public),其他東西(常量、私有變量、方法等等)都遺失了。
    四、json_decode()
    該函數(shù)用于將json文本轉(zhuǎn)換為相應(yīng)的PHP數(shù)據(jù)結(jié)構(gòu)。下面是一個(gè)例子:
    $json = '{"foo": 12345}';

    $obj = json_decode($json);
    print $obj->{'foo'}; // 12345
    通常情況下,json_decode()總是返回一個(gè)PHP對(duì)象,而不是數(shù)組。比如:
    $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
    var_dump(json_decode($json));
    結(jié)果就是生成一個(gè)PHP對(duì)象:
    object(stdClass)#1 (5) {
    ["a"] => int(1)["b"] => int(2)["c"] => int(3)["d"] => int(4)["e"] => int(5)
    }
    如果想要強(qiáng)制生成PHP關(guān)聯(lián)數(shù)組,json_decode()需要加一個(gè)參數(shù)true:
    $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

    var_dump(json_decode($json,true));
    結(jié)果就生成了一個(gè)關(guān)聯(lián)數(shù)組:
    array(5) {
    ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5)
    }

    五、json_decode()的常見錯(cuò)誤
    下面三種json寫法都是錯(cuò)的,你能看出錯(cuò)在哪里嗎?
    $bad_json = "{ 'bar': 'baz' }";
    $bad_json = '{ bar: "baz" }';
    $bad_json = '{ "bar": "baz", }';
    對(duì)這三個(gè)字符串執(zhí)行json_decode()都將返回null,并且報(bào)錯(cuò)。
    第一個(gè)的錯(cuò)誤是,json的分隔符(delimiter)只允許使用雙引號(hào),不能使用單引號(hào)。第二個(gè)的錯(cuò)誤是,json名值對(duì)的"名"(冒號(hào)左邊的部分),任何情況下都必須使用雙引號(hào)。第三個(gè)的錯(cuò)誤是,最后一個(gè)值之后不能添加逗號(hào)(trailing comma)。
    另外,json只能用來(lái)表示對(duì)象(object)和數(shù)組(array),如果對(duì)一個(gè)字符串或數(shù)值使用json_decode(),將會(huì)返回null。
    var_dump(json_decode("Hello World")); //null
    感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評(píng)論 共有條評(píng)論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 简阳市| 芦山县| 开原市| 中宁县| 雅安市| 延寿县| 宜阳县| 昭苏县| 东山县| 深泽县| 西华县| 德州市| 永仁县| 康马县| 合阳县| 阿拉善盟| 和龙市| 正定县| 榆社县| 定襄县| 株洲县| 克东县| 布尔津县| 凤冈县| 遂昌县| 尉犁县| 那曲县| 台东县| 东安县| 宜良县| 昌江| 合水县| 海伦市| 大姚县| 宾川县| 宁远县| 蒙自县| 苍梧县| 张北县| 南丰县| 抚宁县|