Langage de requête pour JSON

11

J'ai un serveur qui renvoie un très gros message JSON et mon application client ne dépend que d'une partie de cette réponse. L'application cliente doit vérifier si la propriété "xyz" existe dans le message JSON et, selon le résultat, exécuter un cas d'utilisation spécifique.

Pour cette exigence, la conversion de l'ensemble du message JSON en objet me semble un peu chère, d'où cette question.

Existe-t-il un langage de requête JSON standard comme celui que nous avons pour XML? Si oui, quels sont les meilleurs connaissent l'implémentation de ce langage de requête en Java.

FYI: Changer ou ajouter un nouveau service côté serveur n'est pas une option.

Ferme
la source
En javascript, si la réponse est envoyée avec l'en-tête correct (application / json), la réponse JSON sera un objet javascript. C'est bien ce que vous demandez? Je ne suis pas sûr de votre question.
Florian Margaine
@Florian Je suis d'accord, permettez-moi de mettre à jour ma question et de la rendre spécifique à Java.
Ferme le
Alors, je suppose que vous avez essayé json.org/java ? :-)
Florian Margaine
Je me demandais la même chose. Chaque bibliothèque Java pour JSON que j'ai vue semble être horriblement volumineuse; n'y a-t-il rien dans le sens de JSON.getString(json_string, 'foo.22.bar')(pour la propriété "bar" dans l'élément 22 de la liste de la propriété "foo", qui contient une chaîne)
Izkata
Ou, pour éviter d'analyser à chaque fois JSON baz = new JSON(json_string); baz.getString('foo.22.bar');, par exemple
Izkata

Réponses:

6

Pourquoi ne pas simplement utiliser javascript? (JSON est la notation d'objet Javascript après tout). Vous n'aurez alors pas à analyser ou manipuler le JSON.

EDIT Jetez un œil à http://json.org/java

Pour cette exigence, la conversion de l'ensemble du message JSON en objet me semble un peu chère, d'où cette question.

Ça ne l'est pas. Désérialiser un objet est bon marché (testez-le vous-même au banc). Parler à l'API externe sera un ordre de grandeur plus cher. Vous pourriez manipuler directement la chaîne, ce qui pourrait être légèrement plus rapide, mais vous risqueriez des bogues, réduiriez l'extensibilité et réduiriez la lisibilité. Un coût élevé.

Tom Squires
la source
J'ai mis à jour ma question et l'ai rendue spécifique à Java.
Ferme le
L'utilisation de javascript n'est pas une option car l'application client s'exécute sur l'unité centrale qui ne prend en charge que LWUIT
Ferme
2

"Mesurez, ne devinez pas". Oui la sérialisation et la désérialisation d'objets peuvent être chères en théorie, mais quels sont les objectifs de performance de votre application? Si la (dé) sérialisation de l'objet ne pousse pas vos performances à des niveaux inacceptables, ne vous en faites pas :-). La clé est bien sûr de savoir quelles devraient être les limites de performance (par exemple, le temps de réponse à l'utilisateur en 2 secondes) et de mesurer chaque partie du cycle de demande / réponse.

Martijn Verburg
la source