la fonction json_decode de classe personnalisée
Est-il possible de décoder une chaîne json pour un objet autre que stdClass?
Vous devez vous connecter pour publier un commentaire.
Est-il possible de décoder une chaîne json pour un objet autre que stdClass?
Vous devez vous connecter pour publier un commentaire.
Pas automatiquement. Mais vous pouvez le faire à l'ancienne route.
Ou sinon, vous pourrait rendre plus automatique:
Modifier: arriver un peu plus sophistiqué:
Vous pouvez le faire - c'est une bidouille, mais tout à fait possible. Nous avons eu à faire lorsque l'on a commencé à stocker des choses dans couchbase.
Dans nos benchmarks ce fut bien plus rapide que d'essayer de parcourir toutes les variables de classe.
Mise en garde: ne fonctionne pas pour les objets imbriqués autres que stdClass
Edit: gardez à l'esprit de la source de données, il est fortement recommandé que vous ne le faites pas avec les données non fiables auprès des utilisateurs sans sans altération de l'analyse des risques.
{ "a": {"b":"c"} }
, où l'objet dansa
est d'une autre classe et pas seulement un tableau associatif?Nous avons construit JsonMapper pour mapper des objets JSON sur notre propre modèle de classes automatiquement. Il fonctionne très bien avec imbriqué/objets enfants.
Il ne repose que sur les docblock type d'information pour la cartographie, la plupart des propriétés de la classe ont de toute façon:
Vous pouvez utiliser Johannes Schmitt Sérialiseur bibliothèque.
Dans la dernière version de la JMS sérialiseur la syntaxe est la suivante:
::class
notation: php.net/manual/en/...Non, ce n'est pas possible de PHP 5.5.1.
La seule chose possible est d'avoir
json_decode
retour associer des tableaux au lieu de la StdClass objets.Vous pouvez faire un wrapper pour votre objet et de faire le wrapper ressembler à elle est l'objet lui-même. Et il va travailler avec multi-niveaux des objets.
Vous pouvez le faire en dessous de la place ..
?>
Pour plus de détails, visitez
créer-custom-classe-en-php-de-json-ou-tableau
Que Gordon dit n'est pas possible. Mais si vous êtes à la recherche d'un moyen d'obtenir une chaîne de caractères qui peut être décodé comme une instance de donner de la classe, vous pouvez utiliser sérialiser et unserialize à la place.
Une fois, j'ai créé une classe de base abstraite pour ce but. Appelons ça de la JsonConvertible. Il devrait sérialiser et désérialiser les membres du public. C'est possible grâce à la Réflexion et à la fin statique de la liaison.
Seulement à partir de la mémoire, donc probablement pas sans faille. Vous aurez également à exclure les propriétés statiques et peuvent donner des classes dérivées de la chance de faire quelques propriétés ignorées lors de sérialisé vers/à partir de json. J'espère que vous avez l'idée, néanmoins.
JSON est un protocole simple de transfert de données entre les différents langages de programmation (et c'est aussi un sous-ensemble de JavaScript) qui prend en charge certains types: nombres, chaînes de caractères, les tableaux/listes, des objets/dicts. Les objets sont juste la clé=valeur des cartes et des Tableaux sont des listes ordonnées.
Donc il n'y a aucun moyen d'exprimer des objets personnalisés de manière générique. La solution est la définition d'une structure où votre programme(s) sachez que c'est un objet personnalisé.
Voici un exemple:
Cela pourrait être utilisé pour créer une instance de
MyClass
et de définir les champs dea
etfoo
à123
et"bar"
.