web-dev-qa-db-fra.com

PHP json_encode - Objet JSON_FORCE_OBJECT mixte et sortie de tableau

J'ai une structure de données PHP que je veux encoder en JSON. Il peut contenir un certain nombre de tableaux vides, dont certains doivent être codés en tant que tableaux et d'autres, en tant qu'objets.

Par exemple, disons que j'ai cette structure de données:

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

Je voudrais encoder ceci dans:

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

Mais si j'utilise json_encode($foo, JSON_FORCE_OBJECT), j'obtiendrai des objets tels que:

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

Et si j'utilise json_encode($foo), les tableaux seront comme:

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

Existe-t-il un moyen de coder les données (ou de définir les tableaux) pour obtenir des tableaux et des objets mixtes? 

31
Woodgnome

Créez bar1 en tant qu'objet new stdClass(). Ce sera le seul moyen pour json_encode() de le distinguer. Cela peut être fait en appelant new stdClass() ou en le lançant avec (object)array()

$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":[]}

OU par typecasting:

$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
Michael Berkowski

Même réponse, pour php7 + et php 5.4.

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

echo json_encode ($ foo);

0
Cryptopat