(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)
json_encode — 對變量進行 JSON 編碼
value
待編碼的 value ,除了 資源(resource)
類型之外,可以為任何數(shù)據(jù)類型。
所有字符串數(shù)據(jù)的編碼必須是 UTF-8。
注意:
PHP 實現(xiàn)了 JSON 的一個超集,參考 ? RFC 7159.
options
由以下常量組成的二進制掩碼:
JSON_FORCE_OBJECT,
JSON_HEX_QUOT,
JSON_HEX_TAG,
JSON_HEX_AMP,
JSON_HEX_APOS,
JSON_INVALID_UTF8_IGNORE,
JSON_INVALID_UTF8_SUBSTITUTE,
JSON_NUMERIC_CHECK,
JSON_PARTIAL_OUTPUT_ON_ERROR,
JSON_PRESERVE_ZERO_FRACTION,
JSON_PRETTY_PRINT,
JSON_UNESCAPED_LINE_TERMINATORS,
JSON_UNESCAPED_SLASHES,
JSON_UNESCAPED_UNICODE,
JSON_THROW_ON_ERROR。
關(guān)于 JSON 常量詳情參考
JSON 常量頁面。
depth設(shè)置最大深度。 必須大于0。
成功則返回 JSON 編碼的 string 或者在失敗時返回 false 。
| 版本 | 說明 |
|---|---|
| 7.3.0 |
options 參數(shù)新增
JSON_THROW_ON_ERROR
常量。
|
| 7.2.0 |
options 參數(shù)新增
JSON_INVALID_UTF8_IGNORE 和
JSON_INVALID_UTF8_SUBSTITUTE
常量。
|
| 7.1.0 |
options 參數(shù)新增
JSON_UNESCAPED_LINE_TERMINATORS
常量。
|
| 7.1.0 | 對 Double 的值進行編碼時,使用 serialize_precision 代替 precision。 |
示例 #1 json_encode() 例子
<?php
$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}
示例 #2 json_encode() 函數(shù)中 options 參數(shù)的用法
<?php
$a = array('<foo>',"'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: ["<foo>","'bar'","\"baz\"","&blong&","\u00e9"]
Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"]
Apos: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"]
Quot: ["<foo>","'bar'","\u0022baz\u0022","&blong&","\u00e9"]
Amp: ["<foo>","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"]
Unicode: ["<foo>","'bar'","\"baz\"","&blong&","é"]
All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"]
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"}
示例 #3 選項 JSON_NUMERIC_CHECK 例子
<?php
echo "Strings representing numbers automatically turned into numbers".PHP_EOL;
$numbers = array('+123123', '-123123', '1.2e3', '0.00001');
var_dump(
$numbers,
json_encode($numbers, JSON_NUMERIC_CHECK)
);
echo "Strings containing improperly formatted numbers".PHP_EOL;
$strings = array('+a33123456789', 'a123');
var_dump(
$strings,
json_encode($strings, JSON_NUMERIC_CHECK)
);
?>
以上例程的輸出類似于:
Strings representing numbers automatically turned into numbers
array(4) {
[0]=>
string(7) "+123123"
[1]=>
string(7) "-123123"
[2]=>
string(5) "1.2e3"
[3]=>
string(7) "0.00001"
}
string(28) "[123123,-123123,1200,1.0e-5]"
Strings containing improperly formatted numbers
array(2) {
[0]=>
string(13) "+a33123456789"
[1]=>
string(4) "a123"
}
string(24) "["+a33123456789","a123"]"
示例 #4 連續(xù)與非連續(xù)數(shù)組示例
<?php
echo "連續(xù)數(shù)組".PHP_EOL;
$sequential = array("foo", "bar", "baz", "blong");
var_dump(
$sequential,
json_encode($sequential)
);
echo PHP_EOL."非連續(xù)數(shù)組".PHP_EOL;
$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$nonsequential,
json_encode($nonsequential)
);
echo PHP_EOL."刪除一個連續(xù)數(shù)組值的方式產(chǎn)生的非連續(xù)數(shù)組".PHP_EOL;
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
?>
以上例程會輸出:
連續(xù)數(shù)組
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"
非連續(xù)數(shù)組
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"}"
刪除一個連續(xù)數(shù)組值的方式產(chǎn)生的非連續(xù)數(shù)組
array(3) {
[0]=>
string(3) "foo"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(33) "{"0":"foo","2":"baz","3":"blong"}"
示例 #5 選項 JSON_PRESERVE_ZERO_FRACTION 的例子
<?php
var_dump(json_encode(12.0, JSON_PRESERVE_ZERO_FRACTION));
var_dump(json_encode(12.0));
?>
以上例程會輸出:
string(4) "12.0" string(2) "12"
注意:
如果執(zhí)行失敗,可以通過 json_last_error() 函數(shù)來獲取詳細錯誤信息。
注意:
如果要編碼的數(shù)組的鍵不是從0開始的數(shù)字,所有的鍵將會被當作字符串,并明確聲明為 key-value 對。
注意:
Like the reference JSON encoder, json_encode() will generate JSON that is a simple value (that is, neither an object nor an array) if given a string, integer, float or boolean as an input
value. While most decoders will accept these values as valid JSON, some may not, as the specification is ambiguous on this point.總而言之,應該測試下 JSON decoder 能否處理 json_encode() 生成的數(shù)據(jù)。