收藏
回答

JSON.parse的问题!含有换行符和空格是不能转换的

问题模块
API和组件

前些天我测试了返回数据是json格式字符串的字符,使用这个却不能转换,弄了很久并想过很多问题都解决不了,后来考虑到正则我才发现一个问题。


平常我是 console.dir(data)输出内容为连续的字符串,console.log(data)输出的是具有换行和空格的字符串。他们之间的数据看到只有换行符和空格符的区别


最后我是采用了正则去除换行和空格的转义符才可以实现变成json对象数据使用,也就是说JSON.parse转义的是不能含有换行符或空格的字符串


这个分享大家看看,不知道大家有没有遇到过。

最后一次编辑于  2017-01-04  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

3 个回答

  • 大海²⁰¹⁹
    大海²⁰¹⁹
    2017-10-07

    是的,的确这个问题。怎么解决?

    2017-10-07
    赞同
    回复
  • 其乐无穷
    其乐无穷
    2017-10-09

    文中有说

    2017-10-09
    赞同
    回复
  • 大海²⁰¹⁹
    大海²⁰¹⁹
    2017-10-09

        protected string toJSonString(string s)

        {

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < s.Length; i++)

            {

                char c = s[i];

                switch (c)

                {

                    case '\"':

                        sb.Append("\\\"");

                        break;

                    case '\\':

                        sb.Append("\\\\");

                        break;

                    case '/': 

                        sb.Append("\\/"); 

                        break;

                    case '\b':

                        sb.Append("\\b");

                        break;

                    case '\f':

                        sb.Append("\\f");

                        break;

                    case '\n':

                        sb.Append("\\n");

                        break;

                    case '\r':

                        sb.Append("\\r");

                        break;

                    case '\t':

                        sb.Append("\\t");

                        break;

                    case '=':

                        sb.Append("=");

                        break;

                    case '&':

                        sb.Append("&");

                        break;

                    case '?':

                        sb.Append("?");

                        break;

                    case '%':

                        sb.Append("%");

                        break;

                    default:

                        if ((c >= 0 && c <= 31) || c == 127)//在ASCⅡ码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符

                        {


                        }

                        else

                        {

                            sb.Append(c);

                        }

                        break;

                }

            }

          

            //return Server.UrlEncode(str);

            //return Server.UrlPathEncode(Server.UrlPathEncode(str));

            //return HttpUtility.UrlPathEncode(sb.ToString());

            return sb.ToString();

        }



    不仅仅空格和换行要转,这几个都需要转, 转全角字符的那几个是因为小程序页面间传参数需要转。

    2017-10-09
    赞同
    回复