我使用struts2的行動和jQuery UI爲...將Java對象轉換爲JSON?
我想知道如何將一個Map對象轉換成JSON對象,併發送回UI,
現在能夠打印在JSP頁面中的普通的Java Map對象:
{71=Heart XXX, 76=No Heart YYY}
但我希望它是這樣的:
{71:Heart XXX, 76:No Heart YYY}
我將如何做到這一點....?
我使用struts2的行動和jQuery UI爲...將Java對象轉換爲JSON?
我想知道如何將一個Map對象轉換成JSON對象,併發送回UI,
現在能夠打印在JSP頁面中的普通的Java Map對象:
{71=Heart XXX, 76=No Heart YYY}
但我希望它是這樣的:
{71:Heart XXX, 76:No Heart YYY}
我將如何做到這一點....?
嘗試Gson:
Gson gson = new Gson();
String json = gson.toJson(yourMap);
我不會建議把這樣的代碼放到一個JSP,雖然。像這些東西應該像Servlet或Action類一樣存在於控制器中。
也最肯定不希望的輸出是:
{71:Heart XXX, 76:No Heart YYY}
而是正確的JSON像(報價名稱,引用的字符串值):
{"71":"Heart XXX", "76":"No Heart YYY"}
GSON將輸出後者。
在http://www.json.org/上有一堆用於Java的JSON庫。 我會檢查出其中的一個。
雖然這是一個有效的答案,但它應該嘗試解釋爲什麼要放棄內置的struts 2 json支持,並下降到更勞動密集的較低級解決方案。 – chad
我個人使用struts2-json
這個插件。它非常易於使用,您可以通過struts.xml條目輕鬆地將Map轉換爲Json,反之亦然。 創建一個地圖和它的getter/setter。
private Map<String, String> map= new HashMap<String, String>();
在struts.xml
與會話堆棧增加攔截器一起定義一個全局的結果
<result-type name="json" class="org.apache.struts2.json.JSONResult" default="false" />
。
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor" />
<action name="YouAction" class="YourActionClass" method="executeMethod">
<result type="json"></result>
</action>
爲了增加Ashish的答案,那就是添加Struts2的,JSON-插件後。
我喜歡在可能的情況下使用struts2-conventions-plugin,因爲我的struts.xml中只有很少的東西,而傾向於使用大多數註釋。
爲了讓您的操作在使用約定時返回json,有兩個步驟:1)讓您的操作使用json-default包; 2)將操作定義爲具有json結果類型。
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;
}
}
有時比原語值更復雜,你將要修剪JSON返回,或有時你會希望把多個行動統一到一個單獨的類(有時你回來一個複雜的結構,並通過某種方式修剪它,使您可以更輕鬆地在客戶端上進行工作)。爲此,我們使用包含或排除參數。
例排除語言
修改上述結果的註釋是:
@Result(type = "json", params = {
"excludeProperties",
"language"})
另一種方式來實現上述的明確聲明,我們不想要什麼屬性:
@Result(type = "json", params = {
"includeProperties",
"name"})
示例使用排除參數的通配符未提供行動代碼,適合修剪複雜的對象
@Result(type = "json", params = {
"excludeProperties",
"punches.*.punchesCollection, *.punchesCollection.*"})
您可以用插件這是非常難以得到比任何XML或標註方法容易看到。
謝謝...但我已經使用它,並得到它...但根據我的要求,我不應該使用這個你可以建議任何其他方式 – Esh
如果你不允許使用Gson,看看[傑克遜](http://wiki.fasterxml.com/JacksonHome)甚至是[json.org/java](http://json.org/java/)(後者實際上很簡單並且很難使用IMO)。如果你不允許使用任何庫,那麼你將很難獲得JSON的結構和轉義。不要那樣做,使用圖書館。 –
謝謝你......我會盡力讓你知道 – Esh