`
gwh_08
  • 浏览: 331875 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

json与字符串

    博客分类:
  • js
 
阅读更多

json与xml是我们进行数据传输方式,json由于其快速的提取方式经常被大家采用。

大部分的前台框架都对json格式的数据提取进行了处理,如ext,jquery等。但是当我们不用这些框架的时候,对server端的响应的json数据的处理上往往会遇到一些问题,下面是我遇到的一个郁闷了好久的问题。

当server,response的json一个时,响应结果明明为一个json对象如:

{ "programmers": [
        { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
        { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
        { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
       ],
      "authors": [
        { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
        { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
        { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
       ],
      "musicians": [
        { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
        { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
       ]
  }

但如果直接操作:

var people =
      { "programmers": [
        { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
        { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
        { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
       ],
      "authors": [
        { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
        { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
        { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
       ],
      "musicians": [
        { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
        { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
       ]
   }

people.programmers[0].firstName

确报错,没有此对象。

在此主意不要被外表所迷惑。

ajax的XMLHttpRequest响应目前只有两种格式:

一为字符串形式的响应数据,使用responseText获得。

一为XML 形式的响应数据,使用responseXML获得。

所以server的响应格式实质为String类型,而不是json类型。

所以无法直接采用操作json对象格式的形式获取数据。由此我们想到了eval,但是问题又出来了。

直接用eval方法会出项格式转化错误,那该如何解决呢?最后查阅json官网上的json.js之后发现

j = eval('(' + text + ')');

 的转换方式,并测试如下

首先组装字符串:

var list = "{'list':{'codeNumber':'111111111111111'}],'totalCount':6}";

 组合成了字符串list,下一步就是转换成对象了方法如下:

在字符串两端再加上括号然后eval就ok了。测试代码如下:

var list = "{'list':{'codeNumber':'111111111111111'}],'totalCount':6}";
var res =eval('('+list2+')')
alert(res);
alert(res.list[0].codeNumber);

 主意只有在alert(res)为[object Object]时,才说明,此对象有可能为一个json对象而非字符串。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics