web-gelistirme-sc.com

PHP json_encode - JSON_FORCE_OBJECT karışık nesne ve dizi çıkışı

JSON kodlamasını yapmak istediğim bir PHP veri yapısına sahibim. Bazıları dizi olarak kodlanması gereken ve bazıları nesne olarak kodlanması gereken birkaç boş dizi içerebilir.

Örneğin, şu veri yapısına sahip olduğumu varsayalım:

$foo = array(
  "bar1" => array(), // Should be encoded as an object
  "bar2" => array() // Should be encoded as an array
);

Bunu kodlamak istiyorum:

{
  "bar1": {},
  "bar2": []
}   

Ama eğer json_encode($foo, JSON_FORCE_OBJECT) kullanırsam, nesneleri şöyle alacağım:

{
  "bar1": {},
  "bar2": {}
}

Ve eğer json_encode($foo) kullanırsam, dizileri şu şekilde alırım:

{
  "bar1": [],
  "bar2": []
}

Verileri kodlamak (veya dizileri tanımlamak) için karışık diziler ve nesneler alabilmemin bir yolu var mı? 

31
Woodgnome

Bir new stdClass() nesnesi olarak bar1 oluşturun. Bu, json_encode() işlevinin onu ayırt etmenin tek yolu olacaktır. new stdClass()'yi çağırarak veya (object)array() ile yayınlayarak yapılabilir.

$foo = array(
  "bar1" => new stdClass(), // Should be encoded as an object
  "bar2" => array() // Should be encoded as an array
);

echo json_encode($foo);
// {"bar1":{}, "bar2":[]}

VEYA typecasting ile:

$foo = array(
  "bar1" => (object)array(), // Should be encoded as an object
  "bar2" => array() // Should be encoded as an array
);

echo json_encode($foo);
// {"bar1":{}, "bar2":[]}
65

Aynı cevap, php7 + ve php 5.4 için.

$foo = [
  "bar1" => (object)["",""],
  "bar2" => ["",""]
];

echo json_encode ($ foo);

0
Cryptopat