2012-04-24 55 views
0

我有一個存儲在數據庫中的JSON字符串。在我的一個JSP頁面中,我檢索了這個字符串,並且希望能夠將String或JSON對象傳遞給Javascript函數。該功能簡單,就是用於測試目的將Jackjson JSON對象從JSP傳遞到JavaScript函數

function test(h){ 

alert(h); 
} 

現在我可以從數據庫中檢索精細JSON字符串,我已經打印出來的畫面,以確保其得到它,但是當我通過它像這

 <input type="button" 
           name="setFontButton" 
           value="Set" 
           class="form_btn_primary" 
           onclick="test('<%=theJSON%>'); return false;"/> 

什麼也沒有發生。我用螢火蟲檢查有什麼不對,並說有無效字符。

於是,我又試圖傳遞JSON對象,像這樣

Widget widg = mapper.readValue(testing.get(0), Widget.class); 

然後在它

onclick="test('<%=widg%>'); return false;"/> 

通過現在這將在通過沒有錯誤,並提醒對象名稱,但我無法解析它。對象來如與所在的包名Widget類存儲像這樣

[email protected] 

我使用字符串化嘗試,但似乎並沒有此傑克遜JSON對象上工作。

畢竟失敗了,我嘗試了從數據庫中取出字符串並將其編碼爲base64的最後手段。然而,這個太多,如果我這樣做

String test = Base64.encode(theString); 

並傳遞英寸失敗,但如果我這樣做,打印出來的畫面,然後複製的內容打印出來,併發送,通過它的工作原理,所以不要不太明白這是爲什麼。

所以有人可以告訴我我做錯了什麼。我已經嘗試了很多不同的解決方案,沒有任何工作。

JSON字符串被存儲在數據庫這樣

{ 「ID」:1, 「分裂」:[ { 「文本」:[ { 「值」:「測試「 」locationX「:3, 」locationY「: - 153, 」字體「:{ 」類型「: 」正常「, 」大小「: 」中「, 」黑體「:假, 」顏色「:」5a5a5a「, 「斜體」:假 }} ] } ] }

將不勝感激,如果有人可以直接向點我!

編輯:

櫃面其他人有同樣的問題,這樣做是爲了從JSP通過JSON的JS功能

<%=theJSON.replaceAll("\"", "\\\'")%> 

這允許您通過JSON中,

然後在JavaScript中恢復正常JSON格式

theJSON = theJSON.replace(/'/g,'"'); 

應該正常工作

回答

2

我認爲包裹onclick和JSON中的onclick和雙引號的組合可能會讓你感到困惑。想想看,如果你手動輸入的JSON - 它應該是這樣的:

onclick="test('{ "id":1, "splits":[ { "texts":[ { "value":"Test", "locationX":3, "locationY":-153, "font":{ "type":"Normal", "size":"Medium", "bold":false, "colour":"5a5a5a", "italics":false } } ] } ] }'); return false;" 

id前開雙引號實際上將被關閉之後onclick=雙引號(你應該能夠驗證這一點看着頁面源)。嘗試指定的onclick爲:

onclick='test(\'<%=theJSON%>\'); return false;' 
+0

你是沿着正確的線路,不得不逃吧,只要抓住它從數據庫中,然後使用命令的replaceAll逃脫,然後通過新的串入的JavaScript – AdamM 2012-05-03 15:19:51

0

您可以按照以下步驟

  1. 取喬恩串
  2. 使用傑克遜或任何其他JSON jar文件,JSON字符串轉換成JSON數組和使用out.println打印字符串。
  3. 調用這個打印json字符串的jsp
  4. 檢查螢火蟲,你將能夠看到你的json。
  5. 如果Json字符串不能打印,那麼您的json格式可能會出現一些問題。

這是一個很好的json美化網站,http://jsbeautifier.org/,真的讓字符串看起來很簡單。

感謝 ABHI