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数据中含有双引号 或其他非法字符的解决办法的主要内容,如果未能解决你的问题,请参考以下文章