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

这几天,调用别人接口返回json数据含有特殊符号(双引号),当转换成json对象总是报错,

json字符格式如下

{
    "BOXINFO":[
        {
            "ITEM_ID":"100201709153277",
            "ITEM_NAME":"抗链球菌溶血素"O"(ASO)测定试剂盒(胶乳免)",
            "QTY":6,
            "NOTES":"厂牌(河北恒利集团制药股份有限公司)批号(1172292)"
        },
        {
            "ITEM_ID":"100201709153278",
            "ITEM_NAME":"茵栀黄颗粒",
            "QTY":3,
            "NOTES":"厂牌(鲁南厚普制药有限公司)批号(00917063)"
        }
    ]
}

json在线解析

如何解决json数据中属性值包含双引号问题,可用以下函数

        /// <summary>
        /// json字符串将属性值中的英文双引号变成中文双引号
        /// </summary>
        /// <param name="strJson">json字符串</param>
        /// <returns></returns>
        public string JsonReplaceSign(string strJson)
        {
            //获取每个字符
            char[] temp = strJson.ToCharArray();
            //获取字符数组长度
            int n = temp.Length;
            //循环整个字符数组
            for (int i = 0; i < n; i++)
            {
                //查找json属性值(:+" )
                if (temp[i] == ‘:‘ && temp[i + 1] == ‘"‘)
                {
                    //循环属性值内的字符(:+2 推算到value值)
                    for (int j = i + 2; j < n; j++)
                    {
                        //判断是否是英文双引号
                        if (temp[j] == ‘"‘)
                        {
                            //排除json属性的双引号
                            if (temp[j + 1] != ‘,‘ && temp[j + 1] != ‘}‘)
                            {
                                //替换成中文双引号
                                temp[j] = ‘”‘;
                            }
                            else if (temp[j + 1] == ‘,‘ || temp[j + 1] == ‘}‘)
                            {
                                break;
                            }
                        }
                        else if (temp[j] == ‘-‘)
                        {
                            temp[j] = ‘ ‘;
                        }
                        else if (true)
                        {
                            // 要过虑其他字符,继续添加判断就可以
                        }
                    }
                }
            }
            return new String(temp);
        }

转换后的结果(上面函数是将json数据中属性值的英文双引号改成中文的)

还有另外一种方法是将json的特殊字符前加上转义字符(\),如:

{
    "BOXINFO":[
        {
            "ITEM_ID":"100201709153277",
            "ITEM_NAME":"抗链球菌溶血素\"O\"(ASO)测定试剂盒(胶乳免)",
            "QTY":6,
            "NOTES":"厂牌(河北恒利集团制药股份有限公司)批号(1172292)"
        },
        {
            "ITEM_ID":"100201709153278",
            "ITEM_NAME":"茵栀黄颗粒",
            "QTY":3,
            "NOTES":"厂牌(鲁南厚普制药有限公司)批号(00917063)"
        }
    ]
}

转义后结果

参考来源地址:

https://blog.csdn.net/ymlkl/article/details/41959297?utm_source=blogxgwz0

原文地址:https://www.cnblogs.com/xielong/p/9855475.html

时间: 2024-11-06 15:09:38

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

jQuery调用WebService返回JSON数据

相信大家都比较了解JSON格式的数据对于ajax的方便,不了解的可以从网上找一下这方面的资料来看一下,这里就不多说了,不清楚的可以在网上查一下,这里只说一下因为参数设置不当引起的取不到返回值的问题. 在用jQuery调用WebService的时候,它contentType默认为 以下是WebService服务端的代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.W

C# json字符串解析含有双引号

最近在维护一个C#项目,一个ajax请求列表数据没有展示数据. 第一反应就是查看请求有没有数据,于是到后台打断点发现有数据,但是页面没有展示. 此时觉得有点诡异,于是在ajax的error方法里面设置断点,居然进来了,于是打印错误消息,发现是json转换异常. 于是想到可能是有特殊字符,定位到315,发现是字符串中含有双引号. 解决办法想到了在JSONARRAY先将字符串encode,然后在js中在decoder. 经过测试问题解决了!!!

[Android学习笔记]ListView中含有Button导致无法响应onItemClick回调的解决办法

转自:http://www.cnblogs.com/eyu8874521/archive/2012/10/17/2727882.html 问题描述: 当ListView的Item中的控件只是一些展示类控件时(比如TextView),注册ListView的监听setOnItemClickListener之后,当点击Item时候会触发onItemClick回调. 但是,当Item中存在Button(继承于Button)的控件时,onItemClick回调不会被触发. 解决方案: 在Item的布局文件

SVN版本冲突中 Files 的值“ &lt; &lt; &lt; &lt; &lt; &lt; &lt; .mine”无效路径中具有非法字符的解决办法

.NET 中 SVN版本冲突中 Files 的值“ < < < < < < < .mine”无效路径中具有非法字符的解决办法: 一. 1.将项目逐个进行编译,会弹出上面的错误,这时候将项目隐藏的文件全部显示,删除 /bin 和 /obj 目录,重新编译,这个时候上面的错误会减少,剩余几个错误,就说明有几个项目的编译出错. 2.继续按照方法一,去编译其他的项目.注意:删除/bin 和 /obj 目录后再编译. 二. 还有一个地方,也会导致这个错误,在项目文件中,就是

ASP.net jQuery调用webservice返回json数据的一些问题

之前寒假时,试着使用jQuery写了几个异步请求demo, 但是那样是使用的webform普通页面,一般应该是用 webservice 居多. 最近写后台管理时,想用异步来实现一些信息的展示和修改, 这是第一次真正的在实际中运用ajax,卡了一个小时才做好简单的信息展示. 在这之间遇到了两个问题.写下来分享给大家,也加深一下自己的印象. 有错误的地方还请大神指出. 前端js代码: 1 <script type="text/javascript"> 2 $(function

调用AJAX返回JSON、XML数据类型

1.调用AJAX返回JSON数据 用下拉列表显示Nation表民族名称 主页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <he

如何在Crystal Portlet中正确返回JSON数据给AJAX请求?

当Crystal Portlet中需要采用Ajax请求,并让后台返回Json数据时,如何才能正确.方便的返回Json数据呢? 以下两种方法均可: 方法一:Ajax请求时,采用RenderURL,对应Portlet类中采用ajax(data)方法返回Java对象即可: 方法二:Ajax请求时,采用ResourceURL,对应Portlet类中采用ajax(data,response)方法将Java对象直接输出到Response流中:(推荐使用此方法) 分步指南 方法一: Ajax请求时,url采用

【转】JMeter中返回Json数据的处理方法

Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Json 数据的响应处理.本文中假设需要从 HTTP 的响应头中返回的 Json 格式的数据流中抽取某些特定的数据,数据格式如下: { "name":"Simpsons family", "members":[ {"firstName"

SpringMVC中controller返回json数据的两种方法

SpringMVC中controller返回json数据的两种方法 1.jsp的ajax请求: function getJson(){ $.ajax({ type:"get", dataType:"json", url:"<%=basePath %>getJson", success:function(data){ for(var i=0;i<jsonData.length;i++){ alert("Id:"