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(/&lt;/g, "<").replace(/&gt;/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(/&lt;/g, "<").replace(/&gt;/g,">");

因为后端传过来的    <br/>    变成了 &lt;br/&gt;

时间: 2024-12-18 03:44:12

Json数据中的特殊字符处理的相关文章

C#调用接口返回json数据中含有双引号 或其他非法字符的解决办法

这几天,调用别人接口返回json数据含有特殊符号(双引号),当转换成json对象总是报错, json字符格式如下 { "BOXINFO":[ { "ITEM_ID":"100201709153277", "ITEM_NAME":"抗链球菌溶血素"O"(ASO)测定试剂盒(胶乳免)", "QTY":6, "NOTES":"厂牌(河北恒利集团

我的Android进阶之旅------&gt;解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1.问题描述 首先,需要解析的Json数据类似于下面的格式: { ret: 0, msg: "normal return.", news: [ { id: "NEW2016062800875700", from: "腾讯新闻客户端", qqnews_download_url: "http://inews.qq.com/m?refer=openapi_for_xiaotiancai", articletype: "1&

获取json数据中所有key集合

/** * 获取json数据中所有key */ function fetchResponseInfo(responseInfo){ //判断是否为空 if((!responseInfo || responseInfo.length <= 0)) { return; } //获取model var jsonCon = jQuery.parseJSON(responseInfo).model; if(!jsonCon){ return; } //获取所有key var keyArr; if(json

处理Json数据中的日期类型.如/Date(1415169703000)/格式

在asp.net mvc后台返回到视图中的json数据中想对数据进行操作,发现日期类型无法直接进行操作,需要转换为指定格式才行.在网上也搜了下方法也很多,觉得有点麻烦,最终使用正则搞定了,分享下: 1 var jsondate="/Date(1415169703000)/"; 2 var formatdate=eval(jsondate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)")); 3 alert(formatda

Json数据中同字段不同数据类型的解析

当解析Json数据时,如果碰到同字段不同数据类型的情况,如何处理呢?比如: [ { "code": 1, "data": 33 }, { "code": 2, "data": "string" }, { "code": 3, "data": { "age": 22, "name": "rc" } } ] 解析

json数据中嵌套 ”(双引号) 导致格式报错的问题,处理方式

先看数据格式: 可以看到,在value中有双引号.主要对应的key是position 和interests两个部分. 发现position 是单个字符串格式. interests是对应的json数组的格式.所以分两步解决. 1.解决position对应的问题. String str=""; str中是有问题的json数据 String newstr=""; String flag1="\"position\":\""

问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果

let carr = [{ "code": "000", "agyTypeCode": "1", "name": "某某市泽国区", "pid": null, "id": "21sadasdsa45dsadsa1w11ssdsw55wsd" }, { "code": "000001", &

json数据中的某一个字段进行快速排序

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 9 </body> 10 </html> 11 <script type="text/javascrip

js提取JSON数据中需要的那部分数据

var data =[ { name: "程咬金",sex:"1",age:26 }, { name: "程才",sex:"0",age:20 }, { name: "程新松",sex:"1",age:22 }, { name: "程功",sex:"1",age:18 } ]; var newd = JSON.stringify(data,['na