茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1674118 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00001.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

PHP特區 : [轉貼]你不可不知的 JSON 基本介紹

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]你不可不知的 JSON 基本介紹

還不知道 JSON 是什麼嘛?本篇教學會帶您瞭解 JSON 在網站上的應用,以及運作流程跟使用 PHPJavaScript 來處理 JSON。假如您現在的工作就是網站設計師,相信一定聽過 JSON,但是什麼是 JSON,它能夠做什麼,及您能透過它在網站上做到哪些事情呢?

透過本篇介紹您可以瞭解基本的 JSON,底下會列出本篇會提到的重點:

  • 什麼是 JSON
  • JSON 應用在哪些地方
  • 如何建立 JSON 字串
  • 一個簡單的 JSON 範例
  • JSON vs XML
  • 如何透過 PHP 及 JavaScript 使用 JSON

什麼是 JSON

JSON 是個以純文字為基底去儲存和傳送簡單結構資料,你可以透過特定的格式去儲存任何資料(字串,數字,陣列,物件),也可以透過物件或陣列來傳送較複雜的資料。一旦建立了您的 JSON 資料,就可以非常簡單的跟其他程式溝通或交換資料,因為 JSON 就只是純文字個格式。

JSON 的優點如下:

  • 相容性高
  • 格式容易瞭解,閱讀及修改方便

  • 支援許多資料格式 (number,string,booleans,nulls,array,associative array)
  • 許多程式都支援函式庫讀取或修改 JSON 資料

JSON 應用在哪些地方

JSON 最常用用在 Web 網頁程式從 Server 端傳送資料給 browser,典型範例就是透過 AJAX 方式交換 JSON 資料,底下簡單舉個範例

  1. 使用者點選了線上產品縮圖
  2. JavaScript 透過 AJAX 方式將產品 ID 傳送給伺服器端
  3. 伺服器端收到 ID,將產品資料 (ex 價格,描述) 編碼成 JSON 資料,並且回傳給瀏覽器
  4. JavaScript 收到 JSON 資料,將其解碼 (decode) 並且將資料顯示在網頁上

您也可以透過網頁將 JSON 資料傳到伺服器端,這都是可以的,把 POST 或 GET 資訊編碼成 JSON 格式即可,如果有在使用 jQuery,它提供了兩個函式處理 JSON,分別是 getJSONparseJSON

如何建立 JSON 字串

可以透過底下規則來建立 JSON 字串

  1. JSON 字串可以包含陣列 Array 資料或者是物件 Object 資料
  2. 陣列可以用 [ ] 來寫入資料
  3. 物件可以用 { } 來寫入資料
  4. name / value 是成對的,中間透過 ( :
    ) 來區隔

物件或陣列的 value 值可以如下:

  1. 數字 (整數或浮點數)
  2. 字串 (請用 “” 括號)
  3. 布林函數 (boolean) (true 或 false)
  4. 陣列 (請用 [ ] )
  5. 物件 (請用 { } )
  6. NULL

一個簡單的 JSON 範例


  "orderID": 12345,
  "shopperName": "John Smith",
  "shopperEmail": "johnsmith@example.com",
  "contents": [
    {
      "productID": 34,
      "productName": "SuperWidget",
      "quantity": 1
    },
    {
      "productID": 56,
      "productName": "WonderWidget",
      "quantity": 3
    }
  ],
  "orderCompleted": true
}

由上面例子我們可以發現 contents 陣列裡面又包含物件,透過上面例子,我們寫成 JavaScript 如下:


<script type="text/javascript">
var cart = {
  "orderID": 12345,
  "shopperName": "John Smith",
  "shopperEmail": "johnsmith@example.com",
  "contents": [
    {
      "productID": 34,
      "productName": "SuperWidget",
      "quantity": 1
    },
    {
      "productID": 56,
      "productName": "WonderWidget",
      "quantity": 3
    }
  ],
  "orderCompleted": true
};
</script>

JSON vs XML

在許多方面,你可以想像 JSON 來替代 XML,在過去 Web Application 開發 AJAX 都是透過 XML 來交換資料,但是你可以發現近幾年來 JSON 已經漸漸取代 XML 格式了,為什麼會變成這樣呢?因為 JSON 格式容易閱讀且好修改,許多程式語言分別開發了函式庫來處理 JSON 資料,我們可以把上面的 JSON 資料改寫成 XML 如下:


<object>
  <property>
    <key>orderID</key>
    <number>12345</number>
  </property>
  <property>
    <key>shopperName</key>
    <string>John Smith</string>
  </property>
  <property>
    <key>shopperEmail</key>
    <string>johnsmith@example.com</string>
  </property>
  <property>
    <key>contents</key>
    <array>
      <object>
        <property>
          <key>productID</key>
          <number>34</number>
        </property>
        <property>
          <key>productName</key>
          <string>SuperWidget</string>
        </property>
        <property>
          <key>quantity</key>
          <number>1</number>
        </property>
      </object>
      <object>
        <property>
          <key>productID</key>
          <number>56</number>
        </property>
        <property>
          <key>productName</key>
          <string>WonderWidget</string>
        </property>
        <property>
          <key>quantity</key>
          <number>3</number>
        </property>
      </object>
    </array>
  </property>
  <property>
    <key>orderCompleted</key>
    <boolean>true</boolean>
  </property>
</object>

大家有沒有發現 XML 的資料量遠大於 JSON 資料量,這也是 JSON 優於 XML 的原因之一

如何利用 JavaScript 來處理 JSON 資料

直接看例子比較快:


<script type="text/javascript">
var cart = {
  "orderID": 12345,
  "shopperName": "John Smith",
  "shopperEmail": "johnsmith@example.com",
  "contents": [
    {
      "productID": 34,
      "productName": "SuperWidget",
      "quantity": 1
    },
    {
      "productID": 56,
      "productName": "WonderWidget",
      "quantity": 3
    }
  ],
  "orderCompleted": true
};
alert ( JSON.stringify( cart ) );
</script>

透過 JSON.stringify 來轉換資料,產生結果如下


{"orderID":12345,"shopperName":"John Smith","shopperEmail":"johnsmith@example.com",
"contents":[{"productID":34,"productName":"SuperWidget","quantity":1},
{"productID":56,"productName":"WonderWidget","quantity":3}],
"orderCompleted":true}

如何將 JSON 字串傳入 JavaScript 變數


<script type="text/javascript">
var jsonString = '                          \
{                                           \
  "orderID": 12345,                         \
  "shopperName": "John Smith",              \
  "shopperEmail": "johnsmith@example.com",  \
  "contents": [                             \
    {                                       \
      "productID": 34,                      \
      "productName": "SuperWidget",         \
      "quantity": 1                         \
    },                                      \
    {                                       \
      "productID": 56,                      \
      "productName": "WonderWidget",        \
      "quantity": 3                         \
    }                                       \
  ],                                        \
  "orderCompleted": true                    \
}                                           \
';
var cart = JSON.parse ( jsonString );
alert ( cart.shopperEmail );
alert ( cart.contents[1].productName );
</script>

結果如下

cart.shopperEmail 輸出 johnsmith@example.com cart.contents[1].productName 輸出 WonderWidget

利用 PHP 建立或讀取 JSON 資料

PHP 直接有寫好函式庫可以處理 JSON 字串,就是利用 json_encodejson_decode

範例:


<?php
$cart = array(
  "orderID" => 12345,
  "shopperName" => "John Smith",
  "shopperEmail" => "johnsmith@example.com",
  "contents" => array(
    array(
      "productID" => 34,
      "productName" => "SuperWidget",
      "quantity" => 1
    ),
    array(
      "productID" => 56,
      "productName" => "WonderWidget",
      "quantity" => 3
    )
  ),
  "orderCompleted" => true
);
echo json_encode( $cart );
?>

輸出


{"orderID":12345,"shopperName":"John Smith","shopperEmail":"johnsmith@example.com","contents":[{"productID":34,"productName":"SuperWidget","quantity":1},{"productID":56,"productName":"WonderWidget","quantity":3}],"orderCompleted":true}

大家可以發現,我們只要用 array 方式將資料輸出,再透過 json_encode 就可以了,接下來看看底下 PHP 如何讀取 JSON 字串


<?php
$jsonString = '
{
  "orderID": 12345,
  "shopperName": "John Smith",
  "shopperEmail": "johnsmith@example.com",
  "contents": [
    {
      "productID": 34,
      "productName": "SuperWidget",
      "quantity": 1
    },
    {
      "productID": 56,
      "productName": "WonderWidget",
      "quantity": 3
    }
  ],
  "orderCompleted": true
}
';
$cart = json_decode( $jsonString );
echo $cart->shopperEmail . "<br>";
echo $cart->contents[1]->productName . "<br>";
?>

很簡單吧,PHP 利用了 json_decode 方式將 json 轉成變數資料以便讀取內容。

結論

這篇介紹主要是讓大家對 JSON 有基本得瞭解,以及如何用 JavaScript 跟 PHP 處理 JSON 資料,其實就不難,希望對大家有幫助。

本篇範例皆來自 JSON Basics: What You Need to Know 文章


原文出處:你不可不知的 JSON 基本介紹 | 小惡魔 - 電腦技術 - 工作筆記 - AppleBOY
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]PHP 讓 json_encode() 指定回傳格式

PHP 讓 json_encode() 指定回傳格式

PHP 回傳 JSON 很方便, 只要將資料經過 json_encode() 就解決了.

不過因為 PHP 自動轉換型別, 造成很多資料都習慣存成字串, 希望在輸出 JSON 的時候, 數字部份可以輸出成數字, 該怎麼做呢?

另一個問題, PHP 轉換成 JSON, 部份陣列會被轉成物件(因為 JavaScript 陣列的 Key 必須是數字, 所以會轉成物件), 要全部強制轉成物件, 該怎麼做呢?

PHP 讓 json_encode() 指定回傳格式

上述的問題, json_encode() 的參數都可以解決.

json_encode() 有這些參數可以用:

  • JSON_HEX_QUOT
  • JSON_HEX_TAG
  • JSON_HEX_AMP
  • JSON_HEX_APOS
  • JSON_NUMERIC_CHECK
  • JSON_PRETTY_PRINT
  • JSON_UNESCAPED_SLASHES
  • JSON_FORCE_OBJECT

PHP 判斷型別輸出 JSON 數字型態

主要靠 json_encode 的 JSON_NUMERIC_CHECK 參數, ex:


<?php
echo json_encode(array('id' => '123', 'data' => 'abc'), JSON_NUMERIC_CHECK);
echo json_encode(array('id' => '123', 'data' => 'abc'));
echo json_encode(array('id' => 123, 'data' => 'abc'));
?>
輸出結果

  • {"id":123,"data":"abc"}
  • {"id":"123","data":"abc"}
  • {"id":123,"data":"abc"}

PHP 強迫輸出 JSON 物件格式

主要靠 json_encode 的 JSON_FORCE_OBJECT 參數, ex:


<?php
echo json_encode(array(1, 2, 3));
echo json_encode(array(1, 2, 3), JSON_FORCE_OBJECT);
echo json_encode(array(array(1, 2, 3)));
echo json_encode(array(array(1, 2, 3)), JSON_FORCE_OBJECT);
echo json_encode(array(1 => 123, 2 => 'abc'));
?>
輸出結果

  • [1,2,3]
  • {"0":1,"1":2,"2":3}
  • [[1,2,3]]
  • {"0":{"0":1,"1":2,"2":3}}
  • {"1":123,"2":"abc"} // 本來就會輸出 Object

原文出處:PHP 讓 json_encode() 指定回傳格式 - Tsung's Blog
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]使用 jquery 跟 php 接 json 格式資料
使用jquery跟php接json格式資料

分享時間:2012-10-09 21:05:39

首先請php吐一個json格式的檔案出來

    <?php
     $city = array();
     $city["0"] = array ("name"=>"Jason", "tel"=>"0919000000", "address"=> "新竹");
     $city["1"] = array ("name"=>"May", "tel"=>"0928222222", "address"=> "桃園");
     echo json_encode($city);
    ?>


吐出來的json格式長這樣:

    [
        { name: "Jason", tel: "0919000000", address: "新竹" },
        { name: "May", tel: "0928000000", address: "桃園" },
    ]


json是一種javascript的物件,因為他本身是javascript,轉換起來沒問題,加上不像xml這麼肥,所以這幾年來很流行。

因為他類似xml,所以我們也可以做巢狀的結構,像這樣包起來。

    $dataArr=array(
        "date"=>"2012-01-01",
        "shoes" => array(
            "kind1" => 2,
            "kind2" =>3
    )


真正在應用的時候會把資料庫撈出來的資料,用迴圈的方式弄成json的格式,再用ajax去parse出來。

    $.ajax({
          url: "json.php",
          type: "GET",
          dataType: "json",
          success: function(json) {
            }
    });


接成功後再把資料撈出來就可以了。

    var NumOfData = json.length; //取出物件長度
    //繞行把資料alert出來
    for (var i = 0; i < NumOfData; i++) {
         alert("Name: "+data[i]["name"]);
         alert("Tel: "+data[i]["tel"]);
         alert("Address: "+data[i]["address"]);
    }


所以你可以這樣把資料append到DOM裡。

    var $div=$("div");
    for (var i = 0; i < NumOfData; i++) {
        $div.append("Name: "+json[i]["name"]+", Tel: "+json[i]["tel"]+", Address: "+json[i]["address"]);
        $div.append("<br/>");
    }


如果要取到第二層資料,則是這樣

    json[i]["level1"]["level2"]



原文出處:使用jquery跟php接json格式資料 - iT邦幫忙::IT知識分享社群
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]在 PHP 語言中使用 JSON

在PHP語言中使用JSON

作者: 阮一峰

日期: 2011年1月14日

目前, JSON已經成為最流行的數據交換格式之一,各大網站的API幾乎都支持它。

我寫過一篇 《數據類型和JSON格式》,探討它的設計思想。今天,我想總結一下PHP語言對它的支持,這是開發互聯網應用程式(特別是編寫API)必須瞭解的知識。

從5.2版本開始,PHP原生提供 json_encode()json_decode()函數,前者用於編碼,後者用於解碼。

一、json_encode()

該函數主要用來將數組和對象,轉換為json格式。先看一個數組轉換的例子:


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

結果為


  {"a":1,"b":2,"c":3,"d":4,"e":5}
  

再看一個對像轉換的例子:


  $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
  }
  

由於json只接受utf-8編碼的字符,所以json_encode()的參數必須是utf-8編碼,否則會得到空字符或者null。當中文使用GB2312編碼,或者外文使用ISO-8859-1編碼的時候,這一點要特別注意。

二、索引數組和關聯數組

PHP支持兩種數組,一種是只保存"值"(value)的索引數組(indexed array),另一種是保存"名值對"(name/value)的關聯數組(associative array)。

由於javascript不支持關聯數組,所以json_encode()只將索引數組(indexed array)轉為數組格式,而將關聯數組(associative array)轉為對像格式。

比如,現在有一個索引數組


  $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"}
  

注意,數據格式從"[]"(數組)變成了"{}"(對像)。

如果你需要將"索引數組"強制轉化成"對像",可以這樣寫


  json_encode( (object)$arr );
  

或者


  json_encode ( $arr, JSON_FORCE_OBJECT );
  

三、類(class)的轉換

下面是一個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;
  
    }
  
  }
  

現在,對這個類的實例進行json轉換:


  $foo = new Foo;
  
  $foo_json = json_encode($foo);
  
  echo $foo_json;
  

輸出結果是


  {"public_ex":"this is public"}
  

可以看到,除了公開變量(public),其他東西(常量、私有變量、方法等等)都遺失了。

四、json_decode()

該函數用於將json文本轉換為相應的PHP數據結構。下面是一個例子:


  $json = '{"foo": 12345}';
   
  $obj = json_decode($json);
  
  print $obj->{'foo'}; // 12345
  

通常情況下,json_decode()總是返回一個PHP對象,而不是數組。比如:


  $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
   
  var_dump(json_decode($json));
  

結果就是生成一個PHP對像:


  object(stdClass)#1 (5) {
  
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
  
  }
  

如果想要強制生成PHP關聯數組,json_decode()需要加一個參數true:


  $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
   
  var_dump(json_decode($json,true));
  

結果就生成了一個關聯數組:


  array(5) {
  
     ["a"] => int(1)
     ["b"] => int(2)
     ["c"] => int(3)
     ["d"] => int(4)
     ["e"] => int(5)
  
  }
  

五、json_decode()的常見錯誤

下面三種json寫法都是錯的,你能看出錯在哪裡嗎?


  $bad_json = "{ 'bar': 'baz' }";
  
  $bad_json = '{ bar: "baz" }';
  
  $bad_json = '{ "bar": "baz", }';
  

對這三個字符串執行json_decode()都將返回null,並且報錯。

第一個的錯誤是,json的分隔符(delimiter)只允許使用雙引號,不能使用單引號。第二個的錯誤是,json名值對的"名"(冒號左邊的部分),任何情況下都必須使用雙引號。第三個的錯誤是,最後一個值之後不能添加逗號(trailing comma)。

另外,json只能用來表示對像(object)和數組(array),如果對一個字符串或數值使用json_decode(),將會返回null。


  var_dump(json_decode("Hello World")); //null
  

六、參考材料

  [1] PHP Manual

  [2] Ed Finkler, JSON is Everybody's Friend

(完)

原文出處:在PHP语言中使用JSON - 阮一峰的网络日志
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼] php 中 json_decode() 和 json_encode() 的使用方法

php中json_decode()和json_encode()的使用方法

1.json_decode()

json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_decode — 對 JSON 格式的字符串進行編碼

說明
mixed json_decode ( string $json [, bool $assoc ] )
接受一個 JSON 格式的字符串並且把它轉換為 PHP 變量

參數

json
待解碼的 json string 格式的字符串。

assoc
當該參數為 TRUE 時,將返回 array 而非 object 。


返回值
Returns an object or if the optional assoc parameter is TRUE, an associative array is instead returned.

範例

Example #1 json_decode() 的例子
代碼如下:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>

上例將輸出:
代碼如下:

object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

array(5) {
["a"] => int(1)
["b"] => int(2)

["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

代碼如下:

$data='[{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""}]';
echo json_decode($data);

結果為:
代碼如下:

Array ( [0] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

可以看出經過json_decode()編譯出來的是對像,現在輸出json_decode($data,true)試下
代碼如下:

echo json_decode($data,true);

結果:
代碼如下:


Array ( [0] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

可以看出 json_decode($data,true)輸出的一個關聯數組,由此可知json_decode($data)輸出的是對像,而json_decode("$arr",true)是把它強制生成PHP關聯數組.

2.json_encode()

json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_encode — 對變量進行 JSON 編碼

Report a bug 說明
string json_encode ( mixed $value [, int $options = 0 ] )
返回 value 值的 JSON 形式

Report a bug 參數

value
待編碼的 value ,除了resource 類型之外,可以為任何數據類型

該函數只能接受 UTF-8 編碼的數據

options
由以下常量組成的二進制掩碼: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE.

Report a bug 返回值
編碼成功則返回一個以 JSON 形式表示的 string 或者在失敗時返回 FALSE 。

Report a bug 更新日誌

版本 說明
5.4.0 options 參數增加常量: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, 和 JSON_UNESCAPED_UNICODE。
5.3.3 options 參數增加常量:JSON_NUMERIC_CHECK。
5.3.0 增加 options 參數.


Report a bug 範例

Example #1 A json_encode() 的例子
代碼如下:

$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

echo json_encode($arr);
?>

以上例程會輸出:
代碼如下:

{"a":1,"b":2,"c":3,"d":4,"e":5}

Example #2 json_encode() 函數中 options 參數的用法
代碼如下:


$a = array('',"'bar'",'"baz"','&blong&', "\xc3\xa9");

echo "Normal: ", json_encode($a), "\n";
echo "Tags: ", json_encode($a, JSON_HEX_TAG), "\n";
echo "Apos: ", json_encode($a, JSON_HEX_APOS), "\n";
echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "\n";
echo "Amp: ", json_encode($a, JSON_HEX_AMP), "\n";
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n";
echo "All: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "\n\n";

$b = array();

echo "Empty array output as array: ", json_encode($b), "\n";
echo "Empty array output as object: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n";

$c = array(array(1,2,3));

echo "Non-associative array output as array: ", json_encode($c), "\n";

echo "Non-associative array output as object: ", json_encode($c, JSON_FORCE_OBJECT), "\n\n";

$d = array('foo' => 'bar', 'baz' => 'long');

echo "Associative array always output as object: ", json_encode($d), "\n";
echo "Associative array always output as object: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n";
?>


以上例程會輸出:
代碼如下:

Normal: ["","'bar'","\"baz\"","&blong&","\u00e9"]
Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"]
Apos: ["","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"]
Quot: ["","'bar'","\u0022baz\u0022","&blong&","\u00e9"]
Amp: ["","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"]
Unicode: ["","'bar'","\"baz\"","&blong&","e"]
All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","e"]

Empty array output as array: []
Empty array output as object: {}

Non-associative array output as array: [[1,2,3]]
Non-associative array output as object: {"0":{"0":1,"1":2,"2":3}}

Associative array always output as object: {"foo":"bar","baz":"long"}
Associative array always output as object: {"foo":"bar","baz":"long"}

Example #3 連續與非連續數組示例
代碼如下:


echo "連續數組".PHP_EOL;
$sequential = array("foo", "bar", "baz", "blong");
var_dump(
$sequential,
json_encode($sequential)
);

echo PHP_EOL."非連續數組".PHP_EOL;
$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$nonsequential,
json_encode($nonsequential)
);

echo PHP_EOL."刪除一個連續數組值的方式產生的非連續數組".PHP_EOL;
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
?>

以上例程會輸出:
代碼如下:

連續數組
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"

非連續數組
array(4) {
[1]=>
string(3) "foo"
[2]=>
string(3) "bar"
[3]=>
string(3) "baz"
[4]=>
string(5) "blong"
}
string(43) "{"1":"foo","2":"bar","3":"baz","4":"blong"}"

刪除一個連續數組值的方式產生的非連續數組
array(3) {

[0]=>
string(3) "foo"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(33) "{"0":"foo","2":"baz","3":"blong"}"

代碼如下:

$obj->Name= 'a1';$obj->Number ='123';
$obj->Contno= '000';
echo json_encode($obj);

結果為:
代碼如下:

{"Name":"a1",
"Number":"123",
"Contno":"000"
}

可以看出json_encode()和json_decode()是編譯和反編譯過程,注意json只接受utf-8編碼的字符,所以json_encode()的參數必須是utf-8編碼,否則會得到空字符或者null。

原文出處: php中json_decode()和json_encode()的使用方法_php技巧_脚本之家
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|