json_encodeZwraca JSON reprezentujący wartość
&reftitle.description;
stringfalsejson_encodemixedvalueintflags0intdepth512
Zwraca łańcuch JSON reprezentujący wartość, podaną w parametrze
value. Jeżeli parametr jest tablicą lub
obiektem, to będzie on zserializowany rekurencyjnie.
Jeżeli wartość do zserializowania jest obiektem, to domyślnie będą uwzględnione
tylko publiczne właściwości. Klasa może implementować interfejs JsonSerializable,
aby kontrolować, w jaki sposób jej wartości będą serializowane do JSON.
Na kodowanie mają wpływ flagi, przekazane w parametrze flags,
ponadto kodowanie wartości zmiennoprzecinkowych jest zależne od wartości
serialize_precision.
&reftitle.parameters;
value
Wartość do zakodowania. Może być dowolnego typu
poza zasobem.
Wszystkie dane muszą być podane w formacie UTF-8.
flags
Maska bitowa składająca się z
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.
Zachowanie tych stałych opisano na
stronie stałe JSON.
depth
Określa maksymalne zagnieżdżenie. Musi być większe od zera.
&reftitle.returnvalues;
W przypadku powodzenia zwraca zakodowany &string; JSON&return.falseforfailure;.
&reftitle.changelog;
&Version;&Description;7.3.0
Dodano flagę
JSON_THROW_ON_ERROR.
7.2.0
Dodano flagi JSON_INVALID_UTF8_IGNORE i
JSON_INVALID_UTF8_SUBSTITUTE.
7.1.0
Dodano flagę
JSON_UNESCAPED_LINE_TERMINATORS.
7.1.0
Przy dekodowaniu wartości zmiennoprzecinkowych (&float;) używane jest ustawienie
serialize_precision
zamiast precision.
&reftitle.examples;
Przykład json_encode
1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>
]]>
&example.outputs;
Przykład json_encode pokazujący działanie niektórych flag
',"'bar'",'"baz"','&blong&', "\xc3\xa9");
echo "Standardowo: ", json_encode($a), "\n";
echo "Znaczniki: ", json_encode($a,JSON_HEX_TAG), "\n";
echo "Apostrofy: ", json_encode($a,JSON_HEX_APOS), "\n";
echo "Cudzysłowy: ", json_encode($a,JSON_HEX_QUOT), "\n";
echo "Znaki et (etki): ", json_encode($a,JSON_HEX_AMP), "\n";
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n";
echo "Wszystkie opcje: ", json_encode($a,JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP), "\n\n";
$b = array();
echo "Pusta tablica zwracana jako tablica: ", json_encode($b), "\n";
echo "Pusta tablica zwracana jako obiekt: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n";
$c = array(array(1,2,3));
echo "Nieasocjacyjna tablica zwracana jako tablica: ", json_encode($c), "\n";
echo "Nieasocjacyjna tablica zwracana jako obiekt: ", json_encode($c, JSON_FORCE_OBJECT), "\n\n";
$d = array('foo' => 'bar', 'baz' => 'long');
echo "Asocjacyjna tablica zwracana zawsze jako obiekt: ", json_encode($d), "\n";
echo "Asocjacyjna tablica zwracana zawsze jako obiekt: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n";
?>
]]>
&example.outputs;
","'bar'","\"baz\"","&blong&","\u00e9"]
Znaczniki: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"]
Apostrofy: ["","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"]
Cudzysłowy: ["","'bar'","\u0022baz\u0022","&blong&","\u00e9"]
Znaki et (etki): ["","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"]
Unicode: ["","'bar'","\"baz\"","&blong&","é"]
Wszystkie opcje: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"]
Pusta tablica zwracana jako tablica: []
Pusta tablica zwracana jako obiekt: {}
Nieasocjacyjna tablica zwracana jako tablica: [[1,2,3]]
Nieasocjacyjna tablica zwracana jako obiekt: {"0":{"0":1,"1":2,"2":3}}
Asocjacyjna tablica zwracana zawsze jako obiekt: {"foo":"bar","baz":"long"}
Asocjacyjna tablica zwracana zawsze jako obiekt: {"foo":"bar","baz":"long"}
]]>
Przykład użycia opcji JSON_NUMERIC_CHECK
]]>
&example.outputs.similar;
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]"
Łańcuchy znaków zawierające niepoprawnie sformatowane liczby
array(2) {
[0]=>
string(13) "+a33123456789"
[1]=>
string(4) "a123"
}
string(24) "["+a33123456789","a123"]"
]]>
Tablica sekwencyjna vs. niesekwencyjna
"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$nonsequential,
json_encode($nonsequential)
);
echo PHP_EOL."Tablica sekwencyjna z usuniętym jednym kluczem".PHP_EOL;
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
?>
]]>
&example.outputs;
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"
Tablica niesekwencyjna
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"}"
Tablica sekwencyjna z usuniętym jednym kluczem
array(3) {
[0]=>
string(3) "foo"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(33) "{"0":"foo","2":"baz","3":"blong"}"
]]>
Przykład użycia opcji JSON_PRESERVE_ZERO_FRACTION
]]>
&example.outputs;
&reftitle.notes;
W przypadku wystąpienia błędu kodowania, funkcja json_last_error
może być użyta do dokładnego określenia rodzaju błędu.
W przypadku kodowania tablicy, której indeksy nie są kolejnymi liczbami
zaczynającymi się od zera 0, wszystkie klucze zapisywane są jako łańcuchy znaków i określone
dokładnie dla każdej pary klucz-wartość.
Tak jak referencyjna funkcja kodująca JSON, json_encode
wygeneruje JSON, który jest typem prostym (czyli nie jest obiektem ani
tablicą), jeżeli podano typy &string;, &integer;, &float; lub &boolean; jako wejście w
value. Mimo że większość dekoderów traktuje te wartości
jak poprawny JSON, niektóre mogą tego nie robić, ponieważ specyfikacja jest
niejednoznaczna w tej kwestii.
Podsumowując, zawsze sprawdzaj, czy Twój dekoder JSON radzi sobie z wyjściem,
które generujesz przez json_encode.
&reftitle.seealso;
JsonSerializablejson_decodejson_last_errorjson_last_error_msgserialize