編碼 JSON 字串
該 json_encode
功能將轉換 PHP 陣列(或,由於 PHP 5.4,它實現了 JsonSerializable
介面的物件),以一個 JSON 編碼的字串。它在成功時返回 JSON 編碼的字串,在失敗時返回 FALSE。
$array = [
'name' => 'Jeff',
'age' => 20,
'active' => true,
'colors' => ['red', 'blue'],
'values' => [0=>'foo', 3=>'bar'],
];
在編碼期間,PHP 資料型別字串,整數和布林值將轉換為它們的 JSON 等效項。關聯陣列被編碼為 JSON 物件,並且 - 當使用預設引數呼叫時 - 索引陣列被編碼為 JSON 陣列。 (除非陣列鍵不是從 0 開始的連續數字序列,否則陣列將被編碼為 JSON 物件。)
echo json_encode($array);
輸出:
{"name":"Jeff","age":20,"active":true,"colors":["red","blue"],"values":{"0":"foo","3":"bar"}}
引數
從 PHP 5.3 開始,json_encode
的第二個引數是一個位掩碼,它可以是以下一個或多個。
與任何位掩碼一樣,它們可以與二進位制 OR 運算子|
結合使用。
PHP 5.x >= 5.3
JSON_FORCE_OBJECT
強制建立物件而不是陣列
$array = ['Joel', 23, true, ['red', 'blue']];
echo json_encode($array);
echo json_encode($array, JSON_FORCE_OBJECT);
輸出:
["Joel",23,true,["red","blue"]]
{"0":"Joel","1":23,"2":true,"3":{"0":"red","1":"blue"}}
JSON_HEX_TAG
, JSON_HEX_AMP
, JSON_HEX_APOS
, JSON_HEX_QUOT
確保在編碼期間進行以下轉換:
不變 | 輸入 | 輸出 |
---|---|---|
JSON_HEX_TAG |
< |
\u003C |
JSON_HEX_TAG |
> |
\u003E |
JSON_HEX_AMP |
& |
\u0026 |
JSON_HEX_APOS |
' |
\u0027 |
JSON_HEX_QUOT |
" |
\u0022 |
$array = ["tag"=>"<>", "amp"=>"&", "apos"=>"'", "quot"=>"\""];
echo json_encode($array);
echo json_encode($array, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
輸出:
{"tag":"<>","amp":"&","apos":"'","quot":"\""}
{"tag":"\u003C\u003E","amp":"\u0026","apos":"\u0027","quot":"\u0022"}
PHP 5.x >= 5.3
JSON_NUMERIC_CHECK
確保將數字字串轉換為整數。
$array = ['23452', 23452];
echo json_encode($array);
echo json_encode($array, JSON_NUMERIC_CHECK);
輸出:
["23452",23452]
[23452,23452]
PHP 5.x >= 5.4
JSON_PRETTY_PRINT
使 JSON 易於閱讀
$array = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];
echo json_encode($array);
echo json_encode($array, JSON_PRETTY_PRINT);
輸出:
{"a":1,"b":2,"c":3,"d":4}
{
"a": 1,
"b": 2,
"c": 3,
"d": 4
}
JSON_UNESCAPED_SLASHES
包括輸出中未轉義的/
正斜槓
$array = ['filename' => 'example.txt', 'path' => '/full/path/to/file/'];
echo json_encode($array);
echo json_encode($array, JSON_UNESCAPED_SLASHES);
輸出:
{"filename":"example.txt","path":"\/full\/path\/to\/file"}
{"filename":"example.txt","path":"/full/path/to/file"}
JSON_UNESCAPED_UNICODE
在輸出中包含 UTF8 編碼的字元,而不是\u
編碼的字串
$blues = ["english"=>"blue", "norwegian"=>"blå", "german"=>"blau"];
echo json_encode($blues);
echo json_encode($blues, JSON_UNESCAPED_UNICODE);
輸出:
{"english":"blue","norwegian":"bl\u00e5","german":"blau"}
{"english":"blue","norwegian":"blå","german":"blau"}
PHP 5.x >= 5.5
JSON_PARTIAL_OUTPUT_ON_ERROR
如果遇到某些不可編碼的值,則允許編碼繼續。
$fp = fopen("foo.txt", "r");
$array = ["file"=>$fp, "name"=>"foo.txt"];
echo json_encode($array); // no output
echo json_encode($array, JSON_PARTIAL_OUTPUT_ON_ERROR);
輸出:
{"file":null,"name":"foo.txt"}
PHP 5.x >= 5.6
JSON_PRESERVE_ZERO_FRACTION
確保浮點數始終編碼為浮點數。
$array = [5.0, 5.5];
echo json_encode($array);
echo json_encode($array, JSON_PRESERVE_ZERO_FRACTION);
輸出:
[5,5.5]
[5.0,5.5]
PHP 7.x >= 7.1
JSON_UNESCAPED_LINE_TERMINATORS
當與 JSON_UNESCAPED_UNICODE
一起使用時,恢復到較舊 PHP 版本的行為,並且不會轉義字元 U + 2028 LINE SEPARATOR 和 U + 2029 PARAGRAPH SEPARATOR。儘管在 JSON 中有效,但這些字元在 JavaScript 中無效,因此在版本 7.1 中更改了 JSON_UNESCAPED_UNICODE
的預設行為。
$array = ["line"=>"\xe2\x80\xa8", "paragraph"=>"\xe2\x80\xa9"];
echo json_encode($array, JSON_UNESCAPED_UNICODE);
echo json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_LINE_TERMINATORS);
輸出:
{"line":"\u2028","paragraph":"\u2029"}
{"line":"
","paragraph":"
"}