• 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

  • 相关阅读:
    mysql高级查询
    RabbitMq应用一的补充(RabbitMQ的应用场景)
    LNMP的并发配置和资源分配
    大神教你Nginx常用基础配置方案
    案例:配置apache和nginx的SSL加密传输协议
    Nginx配置服务器静态文件支持跨域访问
    菜鸟学习计划浅谈之Linux系统
    细述:nginx http内核模块提供的变量和解释
    如何在Linux中使用Firejail运行应用程序
    一款用于对 WiFi 接入点安全进行渗透测试的工具
  • 原文地址:https://www.cnblogs.com/xielong/p/9855475.html
Copyright © 2020-2023  润新知