我正在使用struts 2和velocity模板來生成JSON響應。 現在捕捉是響應不是使用一些速度JSON插件生成 它只是一個字符串,一旦速度完成與它的解析和呈現 響應,並在客戶端我做eval以獲得響應字符串轉換爲JSON。將速度響應轉換爲JSON
我真正需要的是velocity或struts方面的一些解決方案,一旦結果是由velocity生成的 ,框架應該調用我的API,我可以使用我自己的邏輯將vm文件的響應輸出轉換爲JSON 。如何做到這一點?
例如:
- 在瀏覽器中使用JavaScript我設計了一個樹部件,我使用的樹狀結構顯示評論。
- 說用戶點擊評論按鈕。
- 我的用戶界面小部件將觸發一個AJAX來獲取評論數據。
- 該請求被STRUTS 2框架攔截。
- 它會調用,例如,
getComments()
動作API,並將填充一個arrayList與評論對象說cmt。 - 現在響應由速度模板(* .vm)處理。這樣
現在VM我寫代碼:
{ "CommentsData" : [ #set($sep="") #foreach($c in $cmt) $sep { "commentText" : $c.getText() } #set($sep=",") #end }
現在最終的反應可能會是這樣:
{ "CommentsData" : [ { "commentText" : "This is comment 1" }, { "commentText" : "This is comment 2" }, { "commentText" : "This is comment 3" }, { "commentText" : "This is comment 4" }` ] }
現在,這可能看起來像JSON,但它不是嚴格的JSON;我的意思是如果我錯過 某些
,
然後在客戶端在JavaScript我的評估可能會失敗或JSON.parse()
將失敗,但速度模板我現在已經知道如果JSON格式不正確。因此,一旦生成上面的速度模板,我需要一些控制,在那裏我可以寫一些Java代碼來對響應進行一些驗證。
我看到我的方法使用velocity模板來生成JSON輸出(actully一個看起來像JSON的字符串)可能是錯誤的。但是我仍然需要處理我寫的每個速度模板的響應。
如果您要輸出JSON,則不需要模板(速度)。也許你使用的速度與我不同,但我沒有看到模板如何在輸出json時有用。你正在做的事情的一個例子將澄清 – 2012-01-11 07:04:29
對我來說很困惑。你用VM.as做什麼這是一些溫和的事情Engine.a完整的用戶案例幫助你得到一些輸入 – 2012-01-11 07:16:27
這是一個壞模板的用法,它是混淆易出錯的代碼。你不需要它來創建JSON。只需使用JSON庫生成輸出 – 2012-01-11 08:46:21