Abfragesprache für JSON

11

Ich habe einen Server, der eine sehr große JSON-Nachricht zurückgibt, und meine Clientanwendung ist nur von einem Teil dieser Antwort abhängig. Die Clientanwendung muss prüfen, ob die Eigenschaft "xyz" in der JSON-Nachricht vorhanden ist, und je nach Ergebnis einen bestimmten Anwendungsfall ausführen.

Für diese Anforderung klingt das Konvertieren der gesamten JSON-Nachricht in ein Objekt für mich etwas teuer und daher diese Frage.

Gibt es eine Standard-JSON-Abfragesprache wie eine für XML? Wenn ja, was ist die beste Implementierung dieser Abfragesprache in Java?

Zu Ihrer Information: Das Ändern oder Hinzufügen eines neuen Dienstes auf der Serverseite ist keine Option.

Bauernhof
quelle
Wenn in Javascript die Antwort mit dem richtigen Header (application / json) gesendet wird, ist die JSON-Antwort ein Javascript-Objekt. Bitten Sie darum? Ich bin mir Ihrer Frage nicht sicher.
Florian Margaine
@Florian Ich stimme zu, lass mich meine Frage aktualisieren und sie Java-spezifisch machen.
Farm
Dann haben Sie wohl json.org/java ausprobiert ? :-)
Florian Margaine
Ich habe mich das Gleiche gefragt. Jede Java-Bibliothek für JSON, die ich gesehen habe, scheint schrecklich umfangreich zu sein. JSON.getString(json_string, 'foo.22.bar')
Gibt
Oder um nicht jedes Mal zu analysieren JSON baz = new JSON(json_string); baz.getString('foo.22.bar');, zum Beispiel
Izkata

Antworten:

6

Warum nicht einfach Javascript verwenden? (JSON ist schließlich Javascript Object Notation). Sie müssen dann den JSON nicht analysieren oder manipulieren.

BEARBEITEN Schauen Sie sich http://json.org/java an

Für diese Anforderung klingt das Konvertieren der gesamten JSON-Nachricht in ein Objekt für mich etwas teuer und daher diese Frage.

Ist es nicht. Das Deserialisieren eines Objekts ist billig (testen Sie es selbst auf dem Prüfstand). Das Gespräch mit der externen API wird um eine Größenordnung teurer. Sie könnten die Zeichenfolge direkt manipulieren, was möglicherweise etwas schneller ist, aber Sie würden Fehler riskieren, die Erweiterbarkeit verringern und die Lesbarkeit verringern. Ein hoher Preis.

Tom Squires
quelle
Ich habe meine Frage aktualisiert und Java-spezifisch gemacht.
Farm
Die Verwendung von Javascript ist keine Option, da die Clientanwendung auf Headunit ausgeführt wird, das nur LWUIT-Unterstützung bietet
Farm
2

"Messen, nicht raten". Ja, Objektserialisierung und Deserialisierung sind theoretisch teuer, aber was sind die Leistungsziele Ihrer Anwendung? Wenn die Objekt- (De-) Serialisierung Ihre Leistung nicht auf ein inakzeptables Niveau bringt, machen Sie sich darüber keine Sorgen :-). Der Schlüssel ist natürlich zu wissen, wie die Leistungsgrenzen sein sollten (z. B. Antwortzeit an den Benutzer in 2 Sekunden) und jeden Teil des Anforderungs- / Antwortzyklus zu messen.

Martijn Verburg
quelle