JSON.parse():
JSON 通常用于与服务端交换数据。
在接收服务器数据时一般是字符串。
我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象。
Tips:
了解。没必要转换为JavaScript 对象。获取值:data.key即可。
JSON 解析实例:
例如我们从服务器接收了以下数据:
{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }
我们使用 JSON.parse() 方法处理以上数据,将其转换为 JavaScript 对象:
var obj = JSON.parse('{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }');
解析完成后,我们就可以在网页上使用 JSON 数据了:数据的展示形式不尽相同,总归是:对象.属性
document.getElementById("demo").innerHTML = obj.name + ":" + obj.site;
JSON.stringify() :
JSON 通常用于与服务端交换数据。
在向服务器发送数据时一般是字符串。
我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串,从而将该字符串发送到服务器。
JavaScript 对象转换:
例如我们向服务器发送以下数据:
var obj = { "name":"runoob", "alexa":10000, "site":"www.runoob.com"};
我们使用 JSON.stringify() 方法处理以上数据,将其转换为字符串:
var myJSON = JSON.stringify(obj);
myJSON 为字符串,我们可以将 myJSON 发送到服务器。
问题来了:
JSON字符串带有引号 “” ,数据被传递到后台,引号被转义为 ",后台无法解析
解决办法:
方法一:直接使用String的replaceAll功能
roleMenuListJson= roleMenuListJson.replaceAll(""","\"");
方法二:
已知前台数据:menuData为js中定义的一个对象,存在名为menu、office的属性
//ajax 数据提交 var data = { //其他数据 "roleMenuListJson": JSON.stringify(menuData) };
后台需要导包:
import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.springframework.web.util.HtmlUtils;
数据处理:
String json = HtmlUtils.htmlUnescape(roleMenuListJson);
Map<String, Object> map = JSONObject.fromObject(json);
List<String> officeList = JSONArray.fromObject(map.get("office"));
List<String> menuList = JSONArray.fromObject(map.get("menu"));
数据详情:
//roleMenuListJson数据详情
{"office":["98d51e311ead11e9cef5c27f8ada429a","de70fbc01eae11e909f0bdc003855fce","5fc3b6d01eb011e909f0bdc003855fce","7f5a6a201eb011e909f0bdc003855fce","f0e9e3701eb311e9e9fef2631dbbb526"],"menu":["fe386150246711e94a1222fc678b8eb0","08be78d0246811e94a1222fc678b8eb0","0fd05120246811e94a1222fc678b8eb0"]}
//json数据详情
{"office":["98d51e311ead11e9cef5c27f8ada429a","de70fbc01eae11e909f0bdc003855fce","5fc3b6d01eb011e909f0bdc003855fce","7f5a6a201eb011e909f0bdc003855fce","f0e9e3701eb311e9e9fef2631dbbb526"],"menu":["fe386150246711e94a1222fc678b8eb0","08be78d0246811e94a1222fc678b8eb0","0fd05120246811e94a1222fc678b8eb0"]}
//officeList数据详情
["98d51e311ead11e9cef5c27f8ada429a","de70fbc01eae11e909f0bdc003855fce","5fc3b6d01eb011e909f0bdc003855fce","7f5a6a201eb011e909f0bdc003855fce","f0e9e3701eb311e9e9fef2631dbbb526"]
//menuList 数据详情
["fe386150246711e94a1222fc678b8eb0","08be78d0246811e94a1222fc678b8eb0","0fd05120246811e94a1222fc678b8eb0"]
后台断点调试直观数据展示:
解释:
特殊字符转义的问题,例如< > ?等,保存到数据库时,数据库会自动将特殊字符进行转义,存到数据库的就不是你输入的那些特殊字符,而是转义以后的,例如“<”,保存到数据库时会变成“<”,但是你想保存到数据库的就是“<”,因此你可以用HtmlUtils.htmlUnescape()进行转义一下,再保存到数据库就ok了。或者数据库存的是特殊字符转义后的结果,你想要转义前的结果,那么也可以用HtmlUtils.htmlUnescape()进行转义,就能得到你想要的特殊字符了
范例:
/** HTML转义 **/ String s = HtmlUtils.htmlEscape("<div>hello world</div><p> </p>"); System.out.println(s); String s2 = HtmlUtils.htmlUnescape(s); System.out.println(s2);
结果:
<div>hello world</div><p>&nbsp;</p> <div>hello world</div><p> </p>
问题延伸:
HtmlUtils的使用
HttpClient的使用
其他博文解决方案:
前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 "
Java后台如何接收并处理前台传过来的json格式的数组参数