什麼是 JSON ?json_encode的參數設定
根據維基百科的說明,是一種由道格拉斯·克羅克福特構想設計、輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。儘管JSON是Javascript的一個子集,但JSON是獨立於語言的文字格式,並且採用了類似於C語言家族的一些習慣。
你可以透過特定的格式去儲存任何資料(字串,數字,陣列,物件),也可以透過物件或陣列來傳送較複雜的資料。一旦建立了您的 JSON 資料,就可以非常簡單的跟其他程式溝通或交換資料,因為 JSON 就只是純文字個格式。
如果傳送的中文或者非英文的文字,會將文字經過轉換為unicode,不過不用擔心,雖然無法直接辨識,但是程式會自動轉換為文字,不用擔心。
回歸正題,到底要怎麼設定才能達到PHP的json_encode設定呢?用以下的矩陣來說明
Array ( [0] => Array ( [id] => 1 [a] => 1 [str] => 1 ) [1] => Array ( [id] => 2 [a] => 2 [str] => 2 ) )
其中array的KEY為數字,id為數字,a為數字,str為文字!!!!!不可能吧,str看起來為數字,怎麼會是文字呢!?不過這個是由PHP輸出的,尚未辨識為文字或數字那我們來試試看傳換為JSON字串。
json_encode($array)進行轉換, [{“id”:”1″,”a”:”1″,”str”:”1″},{“id”:”2″,”a”:”2″,”str”:”2″}]
奇怪哩,原本的array的KEY為數字不見了,矩陣的索引不見了好像不是一件好事情
如果KEY為文字,轉換過程中就沒會有所損失如json_encode( array( “s”=>1,”ss”=>1.1,”sss”=>2 )),轉換為{“s”:1,”ss”:1.1,”sss”:2}
於上PHP網站查看,原來PHP 5.3.0以後增加了兩個參數可以設定,其中$options的問題比較大,可以設定轉換的小細節
string json_encode ( mixed $value
[, int $options
= 0 [, int $depth
= 512 ]] )
$options參數設定
JSON_NUMERIC_CHECK =>Encodes numeric strings as numbers.
JSON_PRETTY_PRINT =>Use whitespace in returned data to format it. Available since PHP 5.4.0.
JSON_UNESCAPED_SLASHES =>Don’t escape /. Available since PHP 5.4.0.
JSON_FORCE_OBJECT =>Outputs an object rather than an array when a non-associative array is used. Especially useful when the recipient of the output is expecting an object and the array is empty. Available since PHP 5.3.0.
JSON_PRESERVE_ZERO_FRACTION =>Ensures that float values are always encoded as a float value.
JSON_UNESCAPED_UNICODE =>Encode multibyte Unicode characters literally (default is to escape as \uXXXX). Available since PHP 5.4.0.
JSON_PARTIAL_OUTPUT_ON_ERROR =>Substitute some unencodable values instead of failing. Available since PHP 5.5.0.
知道這個設定之後,來測試一下結果會如何呢?
JSON_NUMERIC_CHECK => [{“id”:1,”a”:1,”str”:1},{“id”:2,”a”:2,”str”:2}],全部的數字自動轉換為數字模式,但是KEY還是沒有回來
JSON_FORCE_OBJECT=>{“0”:{“id”:”1″,”a”:”1″,”str”:”1″},”1″:{“id”:”2″,”a”:”2″,”str”:”2″}},KEY回來了