Json转义请教

weisai 2021-04-07 02:15:41
做的接口返回json,但是其中含有特殊字符,如下面的。

[{"FNumber":"1.232.12","FName":"abcdf'wwewe/wewe\we"},{"FNumber":"232323","FName":"撒大声地"},{"FNumber":"343434","FName":"www"},{"FNumber":"1212","FName":"撒大声地
慰问费qww
wew"},{"FNumber":"45354545","FName":"wewewe"wewewe"}]

网上找的方法转义
public static string ReplaceString(string JsonString)
{
if (JsonString == null) { return JsonString; }
if (JsonString.Contains("\\"))
{
JsonString = JsonString.Replace("\\", "\\\\");
}
if (JsonString.Contains("\'"))
{
JsonString = JsonString.Replace("\'", "\\\'");
}
if (JsonString.Contains("\""))
{
JsonString = JsonString.Replace("\"", "\\\"");
}
//去掉字符串的回车换行符
JsonString = Regex.Replace(JsonString, @"[\n\r]", "");
JsonString = JsonString.Trim();
return JsonString;
}

但是返回这样的结果,这个结果直接放Json解析器也不通。转义是这样用的吗
[{\"FNumber\":\"1.232.12\",\"FName\":\"abcdf\'wwewe/wewe\\we\"},{\"FNumber\":\"232323\",\"FName\":\"撒大声地\"},{\"FNumber\":\"343434\",\"FName\":\"www\"},{\"FNumber\":\"1212\",\"FName\":\"撒大声地慰问费qwwwew\"},{\"FNumber\":\"45354545\",\"FName\":\"wewewe\"wewewe\"}]
...全文
1716 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2021-04-12
  • 打赏
  • 举报
回复
Hello World, 2021-04-10
  • 打赏
  • 举报
回复
直接返回DataTable给客户端就好了。 会根据客户端的请求头信息决定返回xml还是json的。 ajax访问时设置contentType = "application/json;utf-8" dataType = 'JSON' 要引用Microsoft.Web.Preview.dll,设置web.config

  <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="1024000">
          <converters>
            <add name="DataSetConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter" />
            <add name="DataRowConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter" />
            <add name="DataTableConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter" />
          </converters>
        </jsonSerialization>
      </webServices>
    </scripting>
  </system.web.extensions>
weisai 2021-04-10
  • 打赏
  • 举报
回复
引用 8 楼 hztltgg 的回复:
更迷糊了,web service返回的是xml格式吧,怎么会要求返回json的?
请教一下 用JsonConvert.SerializeObject 返回的json是这样的(从datatable转换)。这个直接放json解析器是解析不了的 "[{\"Id\":1,\"Category\":\"wewewe\\\\wewewe/\",\"Name\":\"wewewew\\\\wewe\",\"Price\":10.2000000000},{\"Id\":2,\"Category\":\"wewewe/wewewe\",\"Name\":\"wewewewewe\",\"Price\":23.3000000000}]" 用微软的官方教程(类的IEnumerable),会返回这样格式的, [{"Id":1,"Category":"wewewe\\wewewe/","Name":"wewewew\\wewe","Price":10.2000000000},{"Id":2,"Category":"wewewe/wewewe","Name":"wewewewewe","Price":23.3000000000}] 哪个才是标准
weisai 2021-04-10
  • 打赏
  • 举报
回复
引用 14 楼 迷路故作优雅 的回复:
直接通过JsonConvert.SerializeObject序列化返回不行吗,再反序列化成集合
用JsonConvert.SerializeObject 返回的json是这样的(从datatable转换)。这个直接放json解析器是解析不了的 "[{\"Id\":1,\"Category\":\"wewewe\\\\wewewe/\",\"Name\":\"wewewew\\\\wewe\",\"Price\":10.2000000000},{\"Id\":2,\"Category\":\"wewewe/wewewe\",\"Name\":\"wewewewewe\",\"Price\":23.3000000000}]" 需要这个的才行 [{"Id":1,"Category":"wewewe\\wewewe/","Name":"wewewew\\wewe","Price":10.2000000000},{"Id":2,"Category":"wewewe/wewewe","Name":"wewewewewe","Price":23.3000000000}] 哪个才是标准
测试人测试魂 2021-04-10
  • 打赏
  • 举报
回复
大牛们,小弟来蹭个分
tnnd_007 2021-04-09
  • 打赏
  • 举报
回复
直接在数据库查询的时候把这些特殊字符replace不就好了么,为什么要取到datatable里面再处理
麋鹿故作优雅 2021-04-09
  • 打赏
  • 举报
回复
function() { var rs = { msg: "解析结果:" }; rs.json = fromjson(form().json); return rs; }
麋鹿故作优雅 2021-04-09
  • 打赏
  • 举报
回复
直接通过JsonConvert.SerializeObject序列化返回不行吗,再反序列化成集合
笑着宣泄悲伤 2021-04-08
  • 打赏
  • 举报
回复
推荐个网站 https://www.bejson.com/
BXS_null 2021-04-08
  • 打赏
  • 举报
回复
/// <summary>
/// 将list数据转换成json
/// </summary>
/// <param name=""></param>
/// <returns></returns>
public static string ListToJson<T>(List<T> ConfigList)
{
DataContractJsonSerializer json = new DataContractJsonSerializer(ConfigList.GetType());
string szJson = "";
//序列化
using (MemoryStream stream = new MemoryStream())
{
json.WriteObject(stream, ConfigList);
szJson = Encoding.UTF8.GetString(stream.ToArray());
}
return szJson;

————————————————
版权声明:本文为CSDN博主「BXS_null」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40068689/article/details/83586125
weisai 2021-04-08
  • 打赏
  • 举报
回复
引用 9 楼 enaking 的回复:
正常情况是不需要转义的,我们项目web service就主要返回json, 这是趋势
你们是怎么做的
enaking 2021-04-07
  • 打赏
  • 举报
回复
正常情况是不需要转义的,我们项目web service就主要返回json, 这是趋势
hztltgg 2021-04-07
  • 打赏
  • 举报
回复
更迷糊了,web service返回的是xml格式吧,怎么会要求返回json的?
weisai 2021-04-07
  • 打赏
  • 举报
回复
引用 6 楼 hztltgg 的回复:
不知道你的是什么项目,正常webapi项目,你直接返回datatable,自动会序列化,都不需要你处理的呀
有点特殊。客户要求web service中返回Json格式。这个一般是怎么做
hztltgg 2021-04-07
  • 打赏
  • 举报
回复
不知道你的是什么项目,正常webapi项目,你直接返回datatable,自动会序列化,都不需要你处理的呀
weisai 2021-04-07
  • 打赏
  • 举报
回复
引用 1 楼 hztltgg 的回复:
你要处理的源头,不是拿到这个json以后在替换,不然问题太多,正常情况写的web api 接口,返回这个对象集合,是自动会序列化的的,也没啥难度,你这是拼接字符串的吗?修改代码吧,我按正常返回的是

[{"FNumber":"1.232.12","FName":"abcdf'wwewe/wewe\\we"},{"FNumber":"232323","FName":"撒大声地"},{"FNumber":"343434","FName":"www"},{"FNumber":"1212","FName":"撒大声地\r\n慰问费qww\r\nwew"},{"FNumber":"45354545","FName":"wewewe\"wewewe"}]
1.232.12 abcdf'wwewe/wewe\we 232323 撒大声地 343434 www 1212 撒大声地 慰问费qww wew 45354545 wewewe"wewewe
引用 2 楼 hztltgg 的回复:

[
    {"FNumber":"1.232.12","FName":"abcdf'wwewe/wewe\\we"},
    {"FNumber":"232323","FName":"撒大声地"},
    {"FNumber":"343434","FName":"www"},
    {"FNumber":"1212","FName":"撒大声地\r\n慰问费qww\r\nwew"},
    {"FNumber":"45354545","FName":"wewewe\"wewewe"}]
如果是拿到以后替换,这个接口自娱自乐也就算了,要是别人访问,是会骂人的
明白了,就是转json之前把字符替代好。而不是转为之后替代。 单引号不算特殊字符吗?
weisai 2021-04-07
  • 打赏
  • 举报
回复
引用 1 楼 hztltgg 的回复:
你要处理的源头,不是拿到这个json以后在替换,不然问题太多,正常情况写的web api 接口,返回这个对象集合,是自动会序列化的的,也没啥难度,你这是拼接字符串的吗?修改代码吧,我按正常返回的是

[{"FNumber":"1.232.12","FName":"abcdf'wwewe/wewe\\we"},{"FNumber":"232323","FName":"撒大声地"},{"FNumber":"343434","FName":"www"},{"FNumber":"1212","FName":"撒大声地\r\n慰问费qww\r\nwew"},{"FNumber":"45354545","FName":"wewewe\"wewewe"}]
怎么在源头处理?我这个是从数据库查询出来的,然后用datatable转换的
hztltgg 2021-04-07
  • 打赏
  • 举报
回复

[
    {"FNumber":"1.232.12","FName":"abcdf'wwewe/wewe\\we"},
    {"FNumber":"232323","FName":"撒大声地"},
    {"FNumber":"343434","FName":"www"},
    {"FNumber":"1212","FName":"撒大声地\r\n慰问费qww\r\nwew"},
    {"FNumber":"45354545","FName":"wewewe\"wewewe"}]
如果是拿到以后替换,这个接口自娱自乐也就算了,要是别人访问,是会骂人的
hztltgg 2021-04-07
  • 打赏
  • 举报
回复
你要处理的源头,不是拿到这个json以后在替换,不然问题太多,正常情况写的web api 接口,返回这个对象集合,是自动会序列化的的,也没啥难度,你这是拼接字符串的吗?修改代码吧,我按正常返回的是

[{"FNumber":"1.232.12","FName":"abcdf'wwewe/wewe\\we"},{"FNumber":"232323","FName":"撒大声地"},{"FNumber":"343434","FName":"www"},{"FNumber":"1212","FName":"撒大声地\r\n慰问费qww\r\nwew"},{"FNumber":"45354545","FName":"wewewe\"wewewe"}]

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧