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

Posted 小小邪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于C#调用接口返回json数据中含有双引号 或其他非法字符的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

C# 解析JSON格式数据

c# SSIS脚本组件中的转义双引号从SQL数据发送JSON

C# json解析字符串总是多出双引号

json包含单双引号问题解决方案

Json双引号搞砸了C#

js与C#服务端 json数据交互