Conversion de Java Object en JSON?

J'utilise struts2 pour Action et jquery pour UI …

Je veux savoir comment convertir un objet Map sur l'objet JSON et le renvoyer à UI,

Maintenant, je peux l'imprimer dans la page JSP l'objet de carte java normal:

{71=Heart XXX, 76=No Heart YYY} 

Mais je veux que ce soit comme ceci:

 {71:Heart XXX, 76:No Heart YYY} 

Comment vais-je réaliser ceci …?

Essayez Gson :

 Gson gson = new Gson(); String json = gson.toJson(yourMap); 

Je ne recommanderais pas non plus de mettre ce type de code dans un JSP. Des choses comme celles-ci devraient vivre dans un contrôleur comme une classe Servlet ou Action.

Vous ne voulez certainement pas que la sortie soit:

 {71:Heart XXX, 76:No Heart YYY} 

Mais plutôt JSON approprié (noms cités, valeurs de chaînes citées):

 {"71":"Heart XXX", "76":"No Heart YYY"} 

Gson produira le dernier.

struts2-json plugin struts2-json pour cela. C'est très facile à utiliser et vous pouvez facilement convertir la carte vers Json et vice versa à travers certaines entrées struts.xml. Créez une carte et son getter / setters.

 private Map<String, String> map= new HashMap<String, String>(); 

Définir un résultat global comme

  <result-type name="json" class="org.apache.struts2.json.JSONResult" default="false" /> 

Dans votre struts.xml avec l'ajout d'intercepteur dans votre pile de session.

 <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor" /> <action name="YouAction" class="YourActionClass" method="executeMethod"> <result type="json"></result> </action> 

Plus de documentation peut être trouvée ici

Pour ajouter à la réponse d'Ashish, c'est après avoir ajouté le struts2-json-plugin.

J'aime utiliser le struts2-convention-plugin dans la mesure du possible en tant que tel, j'ai très peu dans mon struts.xml et préfère utiliser principalement des annotations à la place.

Pour que votre action retourne json lors de l'utilisation des conventions, il existe deux étapes: 1) demandez à votre action d'utiliser le paquet json-default, 2) Définissez l'action comme ayant un type de résultat json.

Exemple d'annotations JSON

 package org.test.action; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; @ParentPackage("json-default") @Result(type = "json") public class JsonTest extends ActionSupport{ private String name = "Hello World"; private String language = "Java, I mean English"; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } } 

Parfois, les valeurs sont plus complexes que les primitives et vous voudrez taquiner le json retourné, ou parfois vous voudrez mettre plusieurs actions dans une seule classe (parfois vous récupérez une structure compliquée et en choisissant certaines façons de faire votre travail Client plus facile). Pour ce faire, nous utilisons des paramètres d'inclusion ou d'exclusion.

Exemple exclut la langue

Modifiez l'annotation de résultat ci-dessus pour être:

 @Result(type = "json", params = { "excludeProperties", "language"}) 

Une autre façon d'atteindre ce qui précède est d'indiquer explicitement les propriétés que nous voulons:

 @Result(type = "json", params = { "includeProperties", "name"}) 

Exemple Utilisation de caractères génériques avec paramètre d'exclusion Code d'action non fourni, bon pour couper des objets compliqués

 @Result(type = "json", params = { "excludeProperties", "punches.*.punchesCollection, *.punchesCollection.*"}) 

Vous pouvez voir avec le plugin qu'il est assez difficile d'obtenir plus facilement que le xml ou la méthode d'annotation.

Il existe un tas de bibliothèques JSON pour Java sur http://www.json.org/ . Je vérifierais l'un de ces.