我已经在服务器端对JSON进行了编码(使用ESAPI编码器),然后客户端检索Bean的字段并进行进一步处理。
在服务器端
JSONBean bean=new JSONBean();
//populate the bean
Gson gson=new Gson();
String jsonString = gson.toJson(bean);
String JSEscapedStr=ESAPI.encoder().encodeForJavaScript(jsonString);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(JSEscapedStr);
编码的JSON字符串
\ x7B \ x22名称\ x22 \ x3A \ x22Sameer \ x22,\ x22company \ x22 \ x3A \ x22Company \ x22,\ x22名称\ x22 \ x3A \ x22Developer \ x22 \ x7D
在客户端
var JSONObj=JSON.parse(data);
var name=JSONObj["name"];
var company=JSONObj["company"];
var designation=JSONObj["designation"];
//process these variable in javascript
我也尝试过使用response.setContentType(“ plain / text”);在服务器端这也不起作用。
错误
SyntaxError:JSON.parse:当内容类型为“纯文本/文本”时,JSON数据的第1行第1列出现意外字符
如果我对JSON字符串进行硬编码,那么它将起作用
var jsonEncoded="\x7B\x22name\x22\x3A\x22Sameer\x22,\x22company\x22\x3A\x22Company\x22,\x22designation\x22\x3A\x22Developer\x22\x7D";
var JSONObj=JSON.parse(jsonEncoded);
console.log(JSONObj);
var name=JSONObj["name"];
var company=JSONObj["company"];
var designation=JSONObj["designation"];
console.log(name);
console.log(company);
console.log(designation);
最佳答案
您应该只编码有效负载(应该已经在Gson本身上完成了),而不是整个JSon树。ESAPI.encoder().encodeForJavaScript
旨在对JavaScript方法/函数的参数或函数参数进行编码。