Android 关于用JSONObject的new JSONObject(String s)构建含有特殊符号的字符串时报错的解决方案

 说明:转载请注明出处:http://blog.sina.com.cn/s/blog_821e2bb101013lv3.html

 最近做的一个项目需要在后台获取json形式的字符串然后用new JSONObject(Strings)方法构建成JSONObject对象,开发用的Android1.6没有什么问题,但是当在2.2及以上系统测试时会报错,报错显示当字符串有空格时无法构建JSONObject对象,刚开始以为机型问题,并没有太在意,后来发现很多机型都有问题,于是就不得不解决一下了。

 最开始百度、Google了很久一直没找到解决的办法,既然从外找不到解决方案,就只能从内下手,于是开始研究JSONObject这个类看看1.6与2.2有什么不同,找到不同点可能就找到了原因所在。

 先研究了下2.2的JSONObject类,new JSONObject(String s)的源码:

   publicJSONObject(String json) throwsJSONException {

          this(newJSONTokener(json));
   }
不难发现JSONObject(Strings)这个构造函数其实并没有做什么工作,只是直接调用了JSONObject的另一个构造函数:
public JSONObject(JSONTokener readFrom) throws JSONException {
          
          Objectobject = readFrom.nextValue();
          if(object instanceof JSONObject){
              this.nameValuePairs= ((JSONObject) object).nameValuePairs;
          }else {
              throwJSON.typeMismatch(object,"JSONObject");
          }
      }
这个方法也很简单只是调用了JSONToker类的nextValue方法然后把该方法得到的JSONToker的HanshMap对象nameValuePairs赋给JSONObject的nameValuePairs,所以重点在JSONToker的nextValue()方法。
nextValue()的源码:
public Object nextValue() throws JSONException {
              int c = nextCleanInternal();
              switch (c) {
                      case -1:
                              throw syntaxError("End of input");
                      case '{':
                              return readObject();
                      case '[':
                              return readArray();
                      case '\'':
                      case '"':
                              return nextString((char) c);
                      default:
                           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值