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?
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":[]}
Même réponse, pour php7 + et php 5.4.
$foo = [
"bar1" => (object)["",""],
"bar2" => ["",""]
];
echo json_encode ($ foo);