Conversion D'objet en JSON et JSON en objet en PHP, (bibliothèque comme Gson pour Java)
Je développe une application web en PHP,
J'ai besoin de transférer de nombreux objets du serveur en tant que chaîne JSON, y a-t-il une bibliothèque existante pour PHP pour convertir l'objet en JSON et la chaîne JSON en Object, comme la bibliothèque Gson pour Java.
4 réponses
Cela devrait faire l'affaire!
// convert object => json
$json = json_encode($myObject);
// convert json => object
$obj = json_decode($json);
Voici un exemple
$foo = new StdClass();
$foo->hello = "world";
$foo->bar = "baz";
$json = json_encode($foo);
echo $json;
//=> {"hello":"world","bar":"baz"}
print_r(json_decode($json));
// stdClass Object
// (
// [hello] => world
// [bar] => baz
// )
Si vous voulez que la sortie soit un tableau au lieu d'un objet, passez true
à json_decode
print_r(json_decode($json, true));
// Array
// (
// [hello] => world
// [bar] => baz
// )
Plus d'informations sur json_encode()
Voir aussi: json_decode()
Pour plus d'extensibilité pour les applications à grande échelle, utilisez le style poo avec des champs encapsulés.
Manière Simple: -
class Fruit implements JsonSerializable {
private $type = 'Apple', $lastEaten = null;
public function __construct() {
$this->lastEaten = new DateTime();
}
public function jsonSerialize() {
return [
'category' => $this->type,
'EatenTime' => $this->lastEaten->format(DateTime::ISO8601)
];
}
}
Echo json_encode(nouveau Fruit()); //sorties:
{"category":"Apple","EatenTime":"2013-01-31T11:17:07-0500"}
Réel Gson sur PHP :-
json_decode($json, true);
// the second param being true will return associative array. This one is easy.
J'ai fait une méthode pour résoudre ce problème. Mon approche est:
1-créez une classe abstraite qui a une méthode pour convertir des objets en Tableau (y compris attr privé) en utilisant Regex. 2-convertir le tableau retourné en JSON.
J'utilise cette classe abstraite comme parent de toutes mes classes de domaine
Code de classe:
namespace Project\core;
abstract class AbstractEntity {
public function getAvoidedFields() {
return array ();
}
public function toArray() {
$temp = ( array ) $this;
$array = array ();
foreach ( $temp as $k => $v ) {
$k = preg_match ( '/^\x00(?:.*?)\x00(.+)/', $k, $matches ) ? $matches [1] : $k;
if (in_array ( $k, $this->getAvoidedFields () )) {
$array [$k] = "";
} else {
// if it is an object recursive call
if (is_object ( $v ) && $v instanceof AbstractEntity) {
$array [$k] = $v->toArray();
}
// if its an array pass por each item
if (is_array ( $v )) {
foreach ( $v as $key => $value ) {
if (is_object ( $value ) && $value instanceof AbstractEntity) {
$arrayReturn [$key] = $value->toArray();
} else {
$arrayReturn [$key] = $value;
}
}
$array [$k] = $arrayReturn;
}
// if it is not a array and a object return it
if (! is_object ( $v ) && !is_array ( $v )) {
$array [$k] = $v;
}
}
}
return $array;
}
}