Json数据中的特殊字符处理
今天在项目中遇到一个问题,页面上的数据突然显示不出来了,查验后得知是Json数据出现了问题。使用JSON从后台向前台传输数据的时候,当数据本身含有一些特殊字符,会导致JSON数据的解析出错。如果内容中本身就包含了 "\"" 双引号、"\r\n" 回车换行这时候,数据的解析就会出现问题。
\r,\n,\r\n的区别
|
1
2
3
4
|
\n是换行,英文是New line,表示使光标到行首\r是回车,英文是Carriage return,表示使光标下移一格\r\n表示回车换行 |
"\r\n"与"</br>"的区别
|
1
2
|
\r\n是输出的HTML代码换行(查看html代码时,代码换行了)<br />输出给浏览器换行(看网页效果时,文字换行了) |
用户在Textarea输入内容时,有时候会输入双引号,回车或者换行符,保存时,这些特殊符号也也文本内容一起保存到数据库里去了,当获取这些数据时,Json的解析就会出错
下面是有问题数据:
|
1
2
3
4
5
6
7
8
|
{"employees": [{ "firstName":"Bill" , "lastName":"Gates”" },{ "firstName":"George回车了" , "lastName":"Bush" },{ "firstName":"Thomas" , "lastName":"Carter" }]} |
不改动数据数据,怎样才能把数据传到页面上去呢。思路是后端把 \r\n(回车)转成<br/>再,前端再把<br/>转回 \r\n
C# 代码:
1 public static string EncodeTextareaChar(string str)
2 {
3 if (str == null) return null;
4 return str.Replace("\"", "\\\"").Replace("\r\n", "<br/>").Replace("\n", "<br/>").Replace("\r", "<br/>");
5 }
Javascript代码
1 function encodeTextarea(str) {
2 str = str.replace(/</g, "<").replace(/>/g,">");
3 var str = str.replace(/<br\/>/g, "\r\n");
4 return str;
5 }
两种语言都有 replace() 方法,他们也略微有些区别,
Javascript的 replace 只替换一次,如"abcaebacd"中有两个c,它只替换第一个,replace("c","s"),结果是"absaebacd"
C#的replace替换全部,replace("c","s"),结果是"absaebasd"
注:Javascript 要想实现全部替换,可以 replace(/c/g,"s"), / /之间是要替换的内容,g为全局标志
|
1
2
3
|
为什么要加这一个呢?str.replace(/</g, "<").replace(/>/g,">");因为后端传过来的 <br/> 变成了 <br/> |
Json数据中的特殊字符处理的更多相关文章
- C#调用接口返回json数据中含有双引号 或其他非法字符的解决办法
这几天,调用别人接口返回json数据含有特殊符号(双引号),当转换成json对象总是报错, json字符格式如下 { "BOXINFO":[ { ", "ITE ...
- 处理Json数据中的日期类型.如/Date(1415169703000)/格式
在asp.net mvc后台返回到视图中的json数据中想对数据进行操作,发现日期类型无法直接进行操作,需要转换为指定格式才行.在网上也搜了下方法也很多,觉得有点麻烦,最终使用正则搞定了,分享下: v ...
- 从JSON数据中取出相关数据
参考: http://www.cnblogs.com/shuilangyizu/p/6019561.html JSON数据如下: { "total": 1, "rows& ...
- 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题
1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...
- JsonPath如何获取JSON数据中的值
场景: 发送接口请求后,得到请求结果值是Json数据, 需要从Json数据信息中提取字段值. 响应值字符与字符之间有空格,导致用正则表达式方法提取比较麻烦,于是用java的JsonPath方法提取快速 ...
- Json数据中同字段不同数据类型的解析
当解析Json数据时,如果碰到同字段不同数据类型的情况,如何处理呢?比如: [ { "code": 1, "data": 33 }, { "code& ...
- ajax 请求json数据中json对象的构造获取问题
前端的界面中,我想通过ajax来调用写好的json数据,并调用add(data)方法进行解析,请求如下: json数据如下: { “type”:"qqq", "lat&q ...
- Java之Hashmap中value为null,则返回json数据中key不存在
前两天干活儿的时候,将实例对象放在Hashmap中返回给前端: ArtificialEntity artificialEntity = artificialService.getInfoById(id ...
- JS 取Json数据中对象特定属性值
解析JSON JSON 数据 var str = '[{"a": "1","b": "2"}, {"a&quo ...
随机推荐
- mysql存储过程详细教程
记录mysql存储过程中的关键语法:DELIMITER // 声明语句结束符,用于区分;CREATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程 ...
- linux 学习7 用户管理相关文件 r
7.1.用户配置文件 7.2.用户管理相关文件 7.3.用户管理命令 7.4.用户组管理命令 删除用户userdel [root@localhost ~]# userdel [-r] 用户名 //一定 ...
- 读Javascript高级程序设计第三版第六章面向对象设计--创建对象
虽然Object构造函数或者对象字面量都可以用来创建单个对象,但是缺点非常明显:使用同一接口创建很多对象,会产生大量重复代码. 工厂模式 1 function CreatePerson(name,a ...
- 查询阻塞的sql
WITH ProcessCTE(blocked) AS ( SELECT blocked FROM sys.sysprocesses WHERE blocked>0 union SELECT s ...
- 嵌套移动APP端的H5页面meta标签
<meta charset="utf-8"> <meta content="width=device-width, initial-scale=1.0, ...
- WPF功能点
if ("TextBoxBase".Contains(Keyboard.FocusedElement.GetType().BaseType.Name)) { return; } 1 ...
- switch语句下的变量声明和定义
switch语句下的变量声明和定义的问题: switch...case...语句中存在声明和定义会出现一些问题.这个由switch语法特性决定的, switch中每个case都是平等的层次,区别于一般 ...
- Node.js intro
1. require() load module http://stackoverflow.com/questions/9901082/what-is-this-javascript-require ...
- ACM算法模板
旧版模板下载链接: here 新版的模板目前不提供电子版,正在抽时间做一些修正以及添加一些新内容. 新模板如有需要纸质版的,可以自付打印费进行打印.购买链接:https://weidian.com/i ...
- HDU 1285 确定比赛名次 拓扑排序模板题
http://acm.hdu.edu.cn/showproblem.php?pid=1285 #include <cstdio> #include <cstdlib> #inc ...