PHP 8.3.4 Released!

Öntanımlı Sabitler

Buradaki sabitler bu eklenti için tanımlanmış olup, sadece eklentinin PHP içinde derlenmiş olması veya çalışma anında dinamik olarak yüklenmesi halinde kullanılabilir.

Aşağıdaki hata türü sabitleri, ya json_last_error() tarafından döndürülür ya da JsonException sınıfı altında bir code olarak saklanır.

JSON_ERROR_NONE (int)
Hata bulunamadı.
JSON_ERROR_DEPTH (int)
Azami yığın boyutu aşıldı.
JSON_ERROR_STATE_MISMATCH (int)
Kiplerin eşleşmemesi veya alttan taşma hatalarında oluşur.
JSON_ERROR_CTRL_CHAR (int)
Denetim karakteri hatası, muhtemelen yanlış kodlanmış.
JSON_ERROR_SYNTAX (int)
Sözdizimi hatası.
JSON_ERROR_UTF8 (int)
UTF-8 karakter kodlama hatası, muhtemelen yanlış kodlanmış.
JSON_ERROR_RECURSION (int)
json_encode() işlevine iç içe başvurular içeren nesne veya dizi aktarılmış. JSON_PARTIAL_OUTPUT_ON_ERROR seçeneği belirtilirse iç içe başvuruların bulunduğu yerlere null yerleştirilir.
JSON_ERROR_INF_OR_NAN (int)
json_encode() işlevine NAN veya INF içeren bir değer aktarılmış. JSON_PARTIAL_OUTPUT_ON_ERROR seçeneği belirtilirse bu özel sayıların yerine 0yerleştirilir.
JSON_ERROR_UNSUPPORTED_TYPE (int)
json_encode() işlevine desteklenmeyen türde (resource gibi) bir değer aktarılmış. JSON_PARTIAL_OUTPUT_ON_ERROR seçeneği belirtilirse desteklenmeyen değerin yerine null yerleştirilir.
JSON_ERROR_INVALID_PROPERTY_NAME (int)
Bir JSON nesnesi bir PHP nesnesine dönüştürülürken json_decode() işlevine aktarılan dizede \u0000 karakteriyle başlayan bir anahtar vardı.
JSON_ERROR_UTF16 (int)
json_decode() işlevine aktarılan JSON dizesinde bulunan unicode öncelemesi içindeki eşleştirilmemiş tekli UTF-16 vekil.

Aşağıdaki sabitler json_decode() için seçenekler oluşturmak üzere birleştirilebilir.

JSON_BIGINT_AS_STRING (int)
Geniş tamsayıları özgün dize değerlerine dönüştürür.
JSON_OBJECT_AS_ARRAY (int)
JSON nesneleri PHP dizisine dönüştürür. Bu seçenek, json_decode() işlevine ikinci bağımsız değişken olarak true atanarak da eklenebilir.

Aşağıdaki sabitler json_encode() için seçenekler oluşturmak üzere birleştirilebilir.

JSON_HEX_TAG (int)
Bütün < ve > karakterleri \u003C ve \u003E karakterlerine dönüştürülürler.
JSON_HEX_AMP (int)
Bütün & karakterleri \u0026 karakterlerine dönüştürülürler.
JSON_HEX_APOS (int)
Bütün ' karakterleri \u0027 karakterlerine dönüştürülürler.
JSON_HEX_QUOT (int)
Bütün " karakterleri \u0022 dönüştürülürler.
JSON_FORCE_OBJECT (int)
İlişkisel olmayan dizi kullanıldığında çıktıları dizi yerine nesne olmaktadır. Özellikle dizi boş ve çıktı nesne olarak bekleniyorsa çok kullanışlıdır.
JSON_NUMERIC_CHECK (int)
Sayısal dizgileri sayı olarak ele alınır.
JSON_PRETTY_PRINT (int)
Dönen veriyi biçimlemek için boşluk karakteri kullanılır.
JSON_UNESCAPED_SLASHES (int)
/ öncelenmez.
JSON_UNESCAPED_UNICODE (int)
Çokbaytlı Unicode karakteri sayısal değerleriyle kodlar. (\uXXXX biçimi öntanımlıdır).
JSON_PARTIAL_OUTPUT_ON_ERROR (int)
Başarısız olmak yerine kodlanamayan bazı değerler değiştirilir.
JSON_PRESERVE_ZERO_FRACTION (int)
float değerlerin daima kayan noktalı değerler olarak kodlanmasını sağlar.
JSON_UNESCAPED_LINE_TERMINATORS (int)
JSON_UNESCAPED_UNICODE sağlandığı takdirde satırsonu karakterleri öncelenmeden saklanır; PHP 7.1 öncesinde aynı davranışı sağlamak için bu sabit gerekmiyordu. PHP 7.1.0 sürümünden itibaren kullanılabilir.

Aşağıdaki sabitler json_encode() ve json_decode() için seçenekler oluşturmak üzere birleştirilebilir.

JSON_INVALID_UTF8_IGNORE (int)
Geçersiz UTF-8 karakterleri yoksayılır. PHP 7.2.0 sürümünden itibaren kullanılabilir.
JSON_INVALID_UTF8_SUBSTITUTE (int)
Geçersiz UTF-8 karakterleri \0xfffd karakterine dönüştürülür. PHP 7.2.0 sürümünden itibaren kullanılabilir.
JSON_THROW_ON_ERROR (int)
Bir hata oluşursa küresel hata durumunu json_last_error() ve json_last_error_msg() ile ayarlamak yerine bir JsonException atanır. JSON_PARTIAL_OUTPUT_ON_ERROR sabiti JSON_THROW_ON_ERROR sabitine göre önceliklidir. PHP 7.3.0 sürümünden itibaren kullanılabilir.
add a note

User Contributed Notes 7 notes

up
85
majid4466 at gmail dot com
7 years ago
To get a really clean json string use these three constants like so:

<?php
$array
= ['€', 'http://example.com/some/cool/page', '337'];
$bad = json_encode($array);
$good = json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);

// $bad would be ["\u20ac","http:\/\/example.com\/some\/cool\/page","337"]
// $good would be ["€","http://example.com/some/cool/page",337]
?>
up
26
nikospapoutsis
1 year ago
Be EXTREMELY cautious when using the code majid4466 at gmail dot com provided, or JSON_NUMERIC_CHECK in general.

For example, in php 7.4 and 8.1 with precision: 14 and serialize_precision: -1 we get:

<?php
$array
= ['€', 55.6666666666666666, 'http://example.com/some/cool/page', '000337', '55.6666666666666666'];
echo
$case1 = json_encode($array);
echo
$case2 = json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES );
echo
$case3 = json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);

[
"\u20ac",55.666666666666664,"http:\/\/example.com\/some\/cool\/page","000337","55.6666666666666666"]
// in $case1, both euro sign and the url change but we also lost a digit in our unquoted float (due to precision)

["€",55.666666666666664,"http://example.com/some/cool/page","000337","55.6666666666666666"]
// in $case2, both euro sign and the url stay exactly the same but we still lost a digit in our unquoted float (due to precision)

["€",55.666666666666664,"http://example.com/some/cool/page",337,55.666666666666664]
// in $case3, we once again keep euro sign and the url intact but this time not only our unquoted float lost a digit
// but the same happened to our quoted float and the number/string lost its leading zeros too

Also, note that in php 5.x you will probably get some different but equally wrong results as default values may be different and some functions have changed internally as well.
up
66
Yzmir Ramirez
9 years ago
If you curious of the numeric values of the constants, as of JSON 1.2.1, the constants have the following values (not that you should use the numbers directly):

JSON_HEX_TAG => 1
JSON_HEX_AMP => 2
JSON_HEX_APOS => 4
JSON_HEX_QUOT => 8
JSON_FORCE_OBJECT => 16
JSON_NUMERIC_CHECK => 32
JSON_UNESCAPED_SLASHES => 64
JSON_PRETTY_PRINT => 128
JSON_UNESCAPED_UNICODE => 256

JSON_ERROR_DEPTH => 1
JSON_ERROR_STATE_MISMATCH => 2
JSON_ERROR_CTRL_CHAR => 3

JSON_ERROR_SYNTAX => 4

JSON_ERROR_UTF8 => 5
JSON_OBJECT_AS_ARRAY => 1

JSON_BIGINT_AS_STRING => 2
up
15
ASchmidt at Anamera dot net
5 years ago
In a multi-level array, JSON_FORCE_OBJECT will encode ALL nested numeric arrays as objects.

If your concern was ONLY the first-level array (e.g., to make it suitable as a MySQL JSON column), you could just cast your first-level array to object, e.g.:

<?php
$json
= json_encode( (object) $array, JSON_PRESERVE_ZERO_FRACTION+JSON_UNESCAPED_UNICODE );
?>

Or, if you have large arrays and are concerned about the overhead of object casting, you could append a "null" value beyond the size of the array, which will force the array to become associative:

<?php
$beyond
= count( $array ) + 1;
if ( !
array_key_exists( $beyond, $array) )
$array[ $beyond ] = NULL;
$json = json_encode( $array, JSON_PRESERVE_ZERO_FRACTION+JSON_UNESCAPED_UNICODE );
?>

Of course, your later code has to treat an element with a "NULL" value the same as "!isset()", if it iterates the array.
up
-2
Anonymous
5 years ago
flags JSON_NUMERIC_CHECK and JSON_PRESERVE_ZERO_FRACTION are broken in php 7+ — json_encode((float)8.8) returns "8.8000000000000007", and json_encode((float)8.8, JSON_NUMERIC_CHECK) and json_encode((float)8.8, JSON_PRESERVE_ZERO_FRACTION) return "8.8000000000000007" too.

the only way to fix this is setting "serialize_precision = -1" in php.ini
up
-2
JuanP
8 years ago
Updated format values list:

JSON_HEX_TAG => 1
JSON_HEX_AMP => 2
JSON_HEX_APOS => 4
JSON_HEX_QUOT => 8
JSON_FORCE_OBJECT => 16
JSON_NUMERIC_CHECK => 32
JSON_UNESCAPED_SLASHES => 64
JSON_PRETTY_PRINT => 128
JSON_UNESCAPED_UNICODE => 256
JSON_PARTIAL_OUTPUT_ON_ERROR => 512
JSON_PRESERVE_ZERO_FRACTION => 1024
up
-33
on5wis at mac dot com
8 years ago
since json_encode expects a UTF-8 string there is no need to encode the € symbol.

I suggest you try to echo : json_encode('€');
It gives: "\u20ac"
I'm running PHP 5.6.5 on the CLI, on MacOS X 10.10
To Top