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;

更多实例:http://www.runoob.com/json/json-parse.html

 

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 发送到服务器。

更多实例:http://www.runoob.com/json/json-stringify.html

 

问题来了:

JSON字符串带有引号 “” ,数据被传递到后台,引号被转义为 &quot,后台无法解析

解决办法:

 

方法一:直接使用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数据详情
{&quot;office&quot;:[&quot;98d51e311ead11e9cef5c27f8ada429a&quot;,&quot;de70fbc01eae11e909f0bdc003855fce&quot;,&quot;5fc3b6d01eb011e909f0bdc003855fce&quot;,&quot;7f5a6a201eb011e909f0bdc003855fce&quot;,&quot;f0e9e3701eb311e9e9fef2631dbbb526&quot;],&quot;menu&quot;:[&quot;fe386150246711e94a1222fc678b8eb0&quot;,&quot;08be78d0246811e94a1222fc678b8eb0&quot;,&quot;0fd05120246811e94a1222fc678b8eb0&quot;]}

//json数据详情
{"office":["98d51e311ead11e9cef5c27f8ada429a","de70fbc01eae11e909f0bdc003855fce","5fc3b6d01eb011e909f0bdc003855fce","7f5a6a201eb011e909f0bdc003855fce","f0e9e3701eb311e9e9fef2631dbbb526"],"menu":["fe386150246711e94a1222fc678b8eb0","08be78d0246811e94a1222fc678b8eb0","0fd05120246811e94a1222fc678b8eb0"]}

//officeList数据详情
["98d51e311ead11e9cef5c27f8ada429a","de70fbc01eae11e909f0bdc003855fce","5fc3b6d01eb011e909f0bdc003855fce","7f5a6a201eb011e909f0bdc003855fce","f0e9e3701eb311e9e9fef2631dbbb526"]

//menuList 数据详情
["fe386150246711e94a1222fc678b8eb0","08be78d0246811e94a1222fc678b8eb0","0fd05120246811e94a1222fc678b8eb0"]

 后台断点调试直观数据展示:

 

解释:

特殊字符转义的问题,例如< > ?等,保存到数据库时,数据库会自动将特殊字符进行转义,存到数据库的就不是你输入的那些特殊字符,而是转义以后的,例如“<”,保存到数据库时会变成“&lt;”,但是你想保存到数据库的就是“<”,因此你可以用HtmlUtils.htmlUnescape()进行转义一下,再保存到数据库就ok了。或者数据库存的是特殊字符转义后的结果,你想要转义前的结果,那么也可以用HtmlUtils.htmlUnescape()进行转义,就能得到你想要的特殊字符了

范例:

/** HTML转义 **/  
String s = HtmlUtils.htmlEscape("<div>hello world</div><p>&nbsp;</p>");  
System.out.println(s);  
String s2 = HtmlUtils.htmlUnescape(s);  
System.out.println(s2);

结果:

&lt;div&gt;hello world&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; 
 
<div>hello world</div><p>&nbsp;</p>  

 


问题延伸:

HtmlUtils的使用

HttpClient的使用


其他博文解决方案:

前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 &quot

Java后台如何接收并处理前台传过来的json格式的数组参数

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:26 天前 )
960b763e 3 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐