PHP JSON資料處理執行個體程式用法

來源:互聯網
上載者:User

json_encode() ,PHP資料->JSON

json_encode只有一個參數,參數除了resource 類型之外,可以為任何資料類型。但是我們一般是傳入數組,如下例子

 代碼如下 複製代碼

$arr = array(
    "name" => "manson",
    "age" => 23,
    "sex" => 1
);
 
$json_str = json_encode($arr);
var_dump($json_str);

得出的是json字串


{"name":"manson","age":23,"sex":1}

這時一般是把轉換後的字串輸出到前端處理,常用於ajax做資料互動,或者一些前端模板的資料輸出。json_encode需要注意的一個問題就是中文的編碼問題,假如PHP頁面的編碼是非utf-8的,在json_encode之前,必須把有中文內容的部分轉換成utf-8編碼,否則輸出到前端的時候會亂碼。解決的方法網上有很多,這裡舉一個簡單的編碼轉換例子

 

 代碼如下 複製代碼
$arr = array(
    "name" => "張三",
    "age" => 23,
    "sex" => 1
);
 
$arr['name'] = iconv("gbk","utf-8",$arr['name']);
 
$json_str = json_encode($arr);

PHP資料

json_decode有兩個參數,第一個參數是待解碼的json字串,傳入的一定要是一個合符規範的json格式,其實json_decode就是json_encode的逆過程

 代碼如下 複製代碼

$json_str = '{"name":"manson","age":23,"sex":1}';
 
$arr = json_decode($json_str,true);
var_dump($arr);


這裡需要注意的是,json_decode的第2個參數傳的是true,意思是解碼後返回數組格式,假如傳false或是不傳第2個參數,解碼後將返回對象格式,例如上面的代碼返回對象格式是

 

 代碼如下 複製代碼
object(stdClass)#1 (3) {
  ["name"]=>
  string(6) "manson"
  ["age"]=>
  int(23)
  ["sex"]=>
  int(1)
}

對象格式相對於數組格式來說,取得對應資料的難度會增大,特別對於多層級資料結構,還是轉換成數組形式為好,也就是json_decode第2個參數記得傳true。

處理提交的JSON資料

POST方式(GET方式也要注意)向PHP提交了一個JSON資料,比如:

 代碼如下 複製代碼

{"a":1,"b":2}

在PHP中取出這個資料:

 代碼如下 複製代碼

$s=$_POST['data'] ;//or $_GET['data']

然後這個串取出後是被轉義的:

 代碼如下 複製代碼

 {"a":1,"b":2}

如果直接調用:

 代碼如下 複製代碼

$obj = json_decode($s); 

print_r($obj); 
echo $obj->a;

 

 是錯誤的,會報告錯誤.

如果$s直接定義:

 代碼如下 複製代碼

$s='{"a":1,"b":2}';

則沒有問題.

所以在PHP中處理JSON時需要進行一下轉義處理:

 代碼如下 複製代碼

$s=stripslashes($_POST['data']) ;

這樣再進行json解碼就可以了.

PHP 擷取介面內容


假設介面檔案頁面為:/api.php?action=open_getBlogList&only_recommend=1&limit=5 ,那麼我們可以使用下面語句擷取這個介面檔案內容:

 代碼如下 複製代碼
$handle = fopen("/api.php?action=open_getBlogList&only_recommend=1&limit=5","rb");
$content = "";
while (!feof($handle)) {
    $content .= fread($handle, 10000);
}
fclose($handle);

這樣 content 儲存的就是 JSON api 內容。

PHP 解析 JSON 並顯示
原始的內容是無法直接調用的,必須被 PHP 進行進一步處理,才能被調用顯示在網頁中。在 PHP 5.2 及後續版本中,使用 json_decode() 函數來解析 JSON 資料,將其轉換成 PHP 可以調用的資料格式。例如:

 代碼如下 複製代碼
$content = json_decode($content);

解析之後呢,我們就可以按照 PHP 中調用數組資料的方法一樣的調用 JSON 中的資料。這個調用方法需要按照具體的 JSON 資料格式來寫,示範請看下面。關於 json_decode 函數的使用,具體看 PHP 手冊,這裡不再贅述:http://php.net/manual/en/function.json-decode.php

實戰 api


細心的朋友會發現 潛行者m 部落格的側邊欄最下面多了一個“友文推薦”模組,裡面推薦了一些瓊台部落格的文章。

友文推薦是瓊台部落格倡議的一種部落格之間交流方式,比傳統的友情連結更有效,同時實現了部落格內容互補。由於瓊台部落格的部落格程式是他自己本人編寫的,所以他提供了 JSON api 介面,可以擷取到最新的可推薦的文章。

本人使用 PHP 擷取這個 JSON 介面,然後輸出到自己部落格的側邊欄中,下面來實戰操作一下。

第一步,查看 api 調用方式


根據文檔,我使用了 /api.php?action=open_getBlogList&only_recommend=1&limit=5 這樣的參數,意思就是調用五條他推薦的文章。

第二步,擷取 api 結構資料
很簡單,上面說過了,具體代碼如下:

 代碼如下 複製代碼
$handle = fopen("/api.php?action=open_getBlogList&only_recommend=1&limit=5","rb");
$content = "";
while (!feof($handle)) {
    $content .= fread($handle, 10000);
}

fclose($handle);先開啟這資料檔案,然後把所有內容儲存到 content 變數中,因為可以肯定 api 資料不會超過 10000個字元,所以用 10000 作為 fread 函數的第二個參數。這樣,api 返回的 JSON 資料就儲存在了 content 變數中。

第三步,解析並輸出內容
使用下面代碼解析資料,然後調用輸出

 代碼如下 複製代碼

$content = json_decode($content);
foreach ($content->data as $key) {
    echo '<li><a target="_blank" href="'.$key->b_url.'">'.$key->b_title.'</a></li>';
}

首先對 content 變數中的 JSON  資料處理,然後變成 PHP 可以調用的資料,再使用 foreach 遍曆輸出這五條內容,按照我需要的 HTML 格式,將內容插入進去即可。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.