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

时间:2022-09-29 12:07:36

这几天,调用别人接口返回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在线解析

C#调用接口返回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数据中属性值的英文双引号改成中文的)

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

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

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

转义后结果

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

 参考来源地址:

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