首頁  >  文章  >  web前端  >  json在php有何應用? (程式碼範例)

json在php有何應用? (程式碼範例)

不言
不言轉載
2018-09-28 16:01:051813瀏覽

這篇文章帶給大家的內容是關於json在php中有何應用? (程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

從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}<span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"> <span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"></span></span></span> </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

##再看一個物件轉換的例子:

$obj->body = &#39;another post&#39;;
$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編碼的時候,這一點要特別注意。

二、索引數組和關聯數組<span class="token punctuation"><span class="token string"><span class="token punctuation">PHP支援兩個數組,一個是只保存"值"(value)的索引數組(indexed array),另一種是保存"名值對"(name/value)的關聯數組(associative array)。 <span class="token string"><span class="token punctuation">由於javascript不支援關聯數組,所以<span class="token string">json_encode()只將索引數組(indexed array)轉換成數組格式,而將關聯數組(associative array)轉為物件格式。 <span class="token punctuation"><span class="token string"><span class="token punctuation">例如,現在有一個索引數組<span class="token string"><pre class="brush:php;toolbar:false;"> $arr = array(&amp;#39;one&amp;#39;,&amp;#39;two&amp;#39;,&amp;#39;three&amp;#39;); echo json_encode($arr);</pre><pre class="brush:php;toolbar:false;">结果为:[&quot;one&quot;,&quot;two&quot;,&quot;three&quot;]  </pre><span class="token punctuation">如果將它改為關聯數組:<span class="token string"><pre class="brush:php;toolbar:false;"> $arr = Array(&amp;#39;1&amp;#39;=&gt;&amp;#39;one&amp;#39;, &amp;#39;2&amp;#39;=&gt;&amp;#39;two&amp;#39;, &amp;#39;3&amp;#39;=&gt;&amp;#39;three&amp;#39;);    echo json_encode($arr);</pre><span class="token punctuation">結果就變了:{"1":"one ","2":"two","3":"three"}</span></span></span></span></span></span></span></span></span></span></span> </span></span>#  

#注意,資料格式從"[]"(陣列)變成了"{}"(物件)。

如果你需要將"索引數組"強制轉換成"物件"<span class="token punctuation">,可以這樣寫:<span class="token string"><pre class="brush:php;toolbar:false;"> json_encode( (object)$arr );</pre><span class="token punctuation">或:<span class="token string"><pre class="brush:php;toolbar:false;"> json_encode ( $arr, JSON_FORCE_OBJECT );</pre><span class="token punctuation"> </span>三、類別(class)的轉換</span></span></span>下面是一個PHP的類別:</span><pre class="brush:php;toolbar:false;">class Foo { const ERROR_CODE = &amp;#39;404&amp;#39;; public $public_ex = &amp;#39;this is public&amp;#39;; private $private_ex = &amp;#39;this is private!&amp;#39;; protected $protected_ex = &amp;#39;this should be protected&amp;#39;; public function getErrorCode() { return self::ERROR_CODE; } }</pre>現在,對這個類別的實例進行json轉換:<pre class="brush:php;toolbar:false;"> $foo = new Foo; $foo_json = json_encode($foo); echo $foo_json;</pre><span class="token punctuation">輸出結果是:{"public_ex":"this is public"}<span class="token string"><span class="token punctuation"><span class="token string"><span class="token punctuation"></span></span># </span></span></span>

  

可以看到,

除了公開變數(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)[2]
  public &#39;a&#39; => int 1
  public &#39;b&#39; => int 2
  public &#39;c&#39; => int 3
  public &#39;d&#39; => int 4
  public &#39;e&#39; => int 5

如果想要強制產生PHP關聯數組,json_decode()需要加一個參數true:### ###
$json = &#39;{"a":1,"b":2,"c":3,"d":4,"e":5}&#39;;
var_dump(json_decode($json,true));   
###結果就產生了一個關聯數組:###
array (size=5)
  &#39;a&#39; => int 1
  &#39;b&#39; => int 2
  &#39;c&#39; => int 3
  &#39;d&#39; => int 4
  &#39;e&#39; => int 5
######五、json_decode()的常見錯誤#########下面三種json寫法都是錯的,你看得出錯在哪裡嗎? ###
$bad_json = "{ &#39;bar&#39;: &#39;baz&#39; }";
$bad_json = &#39;{ bar: "baz" }&#39;;
$bad_json = &#39;{ "bar": "baz", }&#39;;
###對這三個字串執行json_decode()都###將傳回null###,並且報錯。 ###

第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。

第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号

第三个的错误是,最后一个值之后不能添加逗号(trailing comma)
另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。

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

以上是json在php有何應用? (程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除