Je veux pouvoir accéder aux propriétés d'une chaîne JSON dans ma méthode d'action Java. La chaîne est disponible en disant simplement myJsonString = object.getJson()
. Voici un exemple de ce à quoi la chaîne peut ressembler:
{
'title': 'ComputingandInformationsystems',
'id': 1,
'children': 'true',
'groups': [{
'title': 'LeveloneCIS',
'id': 2,
'children': 'true',
'groups': [{
'title': 'IntroToComputingandInternet',
'id': 3,
'children': 'false',
'groups': []
}]
}]
}
Dans cette chaîne, chaque objet JSON contient un tableau d'autres objets JSON. L'intention est d'extraire une liste d'ID où tout objet donné possédant une propriété de groupe qui contient d'autres objets JSON. J'ai regardé Gson de Google comme un plugin JSON potentiel. Quelqu'un peut-il offrir une certaine forme de conseils sur la façon dont je peux générer Java à partir de cette chaîne JSON?
Réponses:
Google Gson prend en charge les génériques et les beans imbriqués. Dans
[]
JSON représente un tableau et doit correspondre à une collection Java telle queList
ou simplement un tableau Java ordinaire. Le{}
JSON dans représente un objet et doit correspondre à un JavaMap
ou simplement une classe JavaBean.Vous avez un objet JSON avec plusieurs propriétés dont la
groups
propriété représente un tableau d'objets imbriqués du même type. Cela peut être analysé avec Gson de la manière suivante:Assez simple, non? Ayez juste un JavaBean approprié et appelez
Gson#fromJson()
.Voir également:
la source
Bewaaaaare of Gson! C'est très cool, très bien, mais la seconde où vous voulez faire autre chose que de simples objets, vous pourriez facilement avoir besoin de commencer à construire vos propres sérialiseurs (ce qui n'est pas si difficile).
De plus, si vous avez un tableau d'objets et que vous désérialisez du json dans ce tableau d'objets, les vrais types sont PERDUS! Les objets complets ne seront même pas copiés! Utilisez XStream .. Qui, si vous utilisez le jsondriver et définissez les paramètres appropriés, encodera les types laids dans le json réel, afin que vous ne perdiez rien. Un petit prix à payer (moche json) pour une véritable sérialisation.
Notez que Jackson résout ces problèmes et est plus rapide que GSON.
la source
Curieusement, le seul processeur JSON décent mentionné jusqu'à présent a été GSON.
Voici d'autres bons choix:
EDIT (août / 2013):
Un de plus à considérer:
la source
Ou avec Jackson:
la source
Si, par quelque changement que ce soit, vous êtes dans une application qui utilise déjà http://restfb.com/, vous pouvez faire:
etc.
la source
Code java simple et fonctionnel pour convertir
JSONObject
enJava Object
Employee.java
LoadFromJSON.java
la source
la source
Si vous utilisez n'importe quel type de cartes spéciales avec des clés ou des valeurs également des cartes spéciales, vous constaterez que cela n'est pas envisagé par la mise en œuvre de Google.
la source
Quel est le problème avec les trucs standard?
la source
Essayez Boon:
https://github.com/RichardHightower/boon
Il est méchant vite:
https://github.com/RichardHightower/json-parsers-benchmark
Ne me croyez pas sur parole ... jetez un œil à la référence Gatling.
https://github.com/gatling/json-parsers-benchmark
(Jusqu'à 4x, dans certains cas, et sur les 100s de test. Il dispose également d'un mode de superposition d'index encore plus rapide. Il est jeune mais a déjà quelques utilisateurs.)
Il peut analyser JSON vers des cartes et des listes plus rapidement que n'importe quelle autre bibliothèque ne peut analyser vers un DOM JSON et sans le mode de superposition d'index. Avec le mode Boon Index Overlay, c'est encore plus rapide.
Il dispose également d'un mode lax JSON très rapide et d'un mode analyseur PLIST. :) (et a une mémoire super faible, directement à partir du mode octets avec encodage UTF-8 à la volée).
Il dispose également du mode JSON vers JavaBean le plus rapide.
C'est nouveau, mais si la vitesse et l'API simple sont ce que vous recherchez, je ne pense pas qu'il existe une API plus rapide ou plus minimaliste.
la source
Selon le format JSON d'entrée (chaîne / fichier), créez une jSONString. Un exemple d'objet de classe Message correspondant à JSON peut être obtenu comme ci-dessous:
Message msgFromJSON = new ObjectMapper (). ReadValue (jSONString, Message.class);
la source
La manière la plus simple est d'utiliser cette méthode de conversion de valeur douce qui est une méthode personnalisée dans laquelle vous pouvez convertir jsonData en votre classe Dto spécifique.
la source