這篇文章帶給大家的內容是關於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 = '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編碼的時候,這一點要特別注意。二、索引數組和關聯數組<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(&#39;one&#39;,&#39;two&#39;,&#39;three&#39;);
echo json_encode($arr);</pre><pre class="brush:php;toolbar:false;">结果为:["one","two","three"] </pre><span class="token punctuation">如果將它改為關聯數組:<span class="token string"><pre class="brush:php;toolbar:false;"> $arr = Array(&#39;1&#39;=>&#39;one&#39;, &#39;2&#39;=>&#39;two&#39;, &#39;3&#39;=>&#39;three&#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 = &#39;404&#39;;
public $public_ex = &#39;this is public&#39;;
private $private_ex = &#39;this is private!&#39;;
protected $protected_ex = &#39;this should be protected&#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 = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json));
結果就是產生一個PHP物件:object(stdClass)[2]
public 'a' => int 1
public 'b' => int 2
public 'c' => int 3
public 'd' => int 4
public 'e' => int 5
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json,true));###結果就產生了一個關聯數組:###
array (size=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
以上是json在php有何應用? (程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!