2008-11-03 5 views
8

Dans GWT, quel est le meilleur moyen de convertir un type de superposition JavaScriptObject en chaîne JSON?Types de superposition GWT, conversion en JSON

J'ai actuellement

public final String toJSON() {  
    return new JSONObject(this).toString(); 
} 

Ce qui semble fonctionner très bien. Je voudrais savoir s'il existe de meilleures approches.

+0

En plus d'utiliser une autre bibliothèque pour ce faire, c'est la meilleure façon. Vous devez ajouter à votre module GWT. –

Répondre

4

Je n'ai jamais vraiment essayé cela (seulement JSON consommé jusqu'à présent, jamais nécessaire pour le produire). Cela semble être une fonctionnalité native de navigateur/javascript.

Vous pourrait écrire comme:

public native String toJSON() /*-{ 
    return this.toString(); 
}-*/; 

Ils font essentiellement juste exactement la même chose et le résultat probable des sorties identiques JavaScript. Le compilateur d'optimisation est vraiment incroyable.

+3

Est-ce que cela fonctionne? Je l'ai implémenté exactement dans un type de superposition et il renvoie [object Object]. Toute aide est appréciée, merci. – Eugen

+0

@Eugen - voir le commentaire de Nick. Comme il le mentionne, la plupart des navigateurs modernes prendront en charge 'JSON.stringify()'. Si vous devez prendre en charge un navigateur qui ne le fait pas, utilisez un polyfill tel que [JSON 3] (http://bestiejs.github.io/json3/). – Barrie

2

nous avons une méthode JSNI comme ça, mais utiliser la bibliothèque douglas Crockfords JSON (dans le cas où le navigateur ne fournit pas un mode natif):

https://github.com/douglascrockford/JSON-js

public native String stringify() /*-{ 
    return JSON.stringify(); 
}-*/; 

ce qui est beau est que stringify peut prendre paramètres pour joliment imprimer la sortie avec une indentation spécifiée ... entre autres choses