码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2018-10-26 13:19:14      阅读:405      评论:0      收藏:0      [点我收藏+]

标签:调用   股份   判断   for   turn   引号   ram   技术分享   temp   

这几天,调用别人接口返回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数据中含有双引号 或其他非法字符的解决办法

标签:调用   股份   判断   for   turn   引号   ram   技术分享   temp   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!