2012-04-24 87 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