现在我服务器端给我的客户端返回一段json是这样的
{"result":"success",
 "building":[{"id":"4028d3f23b1b70a3013b1b7710bb0002","building_num":"五号楼"},                                                     {"id":"4028d3f63addcc95013addd69bd50007","building_num":"一号楼"}]}即一个字符串和一个building对象,现在这个result能得到,building怎么在客户端获取?直接获取获取不到!想截取json字符串但是json格式不支持substr方法。

解决方案 »

  1.   

    eval成对象 然后直接就可以获取到属性
      

  2.   


    var json = eval("("+str+")");
      

  3.   


    var obj = eval("(" + json + ")");
    var result = obj.result;
    var building = obj.building
      

  4.   

      json对象也不支持这个方法!
      

  5.   

     我用的是jquery方式解析的,刚发现jquery会把json格式解析成Object!当然不支持截取字符串类型了!自己犯2了,谢谢上面回答问题的亲。这个var obj = eval("(" + json + ")");函数是把字符串解析成json形式的,也就是对象形式的,显然也不行。这个我自己解决了,用jquery传回来的json都是object,所以不可能同时传字符串和对象!我传回来的格式改为text了,截取到json需要的字符串之后,又把字符串转换为json格式了,这些就能遍历传回来的对象值了!
    $.ajax({
         type : "POST",
         url : "/work/housesource/findBuildingByPoint.do?id="+pointId,
         dataType : "text",
         success : function(data) {
                     var strbuilding = data.substring(31,data.length - 1);
                     alert(strbuilding);
                     var arr = eval('('+strbuilding+')');
                     for(var i=0;i<arr.length;i++){
                        alert(arr[i].id);
                        alert(arr[i].building_num);
                      }
      

  6.   

    楼主真能搞,还substring,直接操作json对象不就行了。$.ajax({
         type : "POST",
         url : "/work/housesource/findBuildingByPoint.do?id="+pointId,
         dataType : "json",////
         success : function(data) {
                    // var strbuilding = data.substring(31,data.length - 1);
                    // alert(strbuilding);
                    // var arr = eval('('+strbuilding+')');
    arr=data.building///////////
                     for(var i=0;i<arr.length;i++){
                        alert(arr[i].id);
                        alert(arr[i].building_num);
                      } 
      

  7.   


    +1,直接返回json对象之后,可以根据data.building来获取你{}里面的属性,之后再遍历就行!
      

  8.   

     +100  你看看我返回来的字符串在+1,直接以json形式返回来jquery解析会有问题,根本不会到success:这一步!!!!!!!!!!
      

  9.   


    就你贴出来的代码是标准json格式,不会不执行success回调的,只能说是实际返回的格式有问题。增加error回调输出返回了什么内容$.ajax({
         type : "POST",
         url : "/work/housesource/findBuildingByPoint.do?id="+pointId,
         dataType : "json",////
    error:function(xhr){alert('出错了\n'+xhr.responseText)},///////
         success : function(data) {
                    // var strbuilding = data.substring(31,data.length - 1);
                    // alert(strbuilding);
                    // var arr = eval('('+strbuilding+')');
    arr=data.building///////////
                     for(var i=0;i<arr.length;i++){
                        alert(arr[i].id);
                        alert(arr[i].building_num);
                      }
      

  10.   

    如果返回的是json格式字符串的话,用jQuery解析好像要用var result = jQuery.parseJSON(data.d),这样转换出来的就是一个完整的json对象,然后你就可以用result.building获取到building这个数组。 success : function(data){
                  var result = jQuery.parseJSON(data.d);
                  var arr = result.buiding;
                  var len = arr.length;
                  for (var i=0;i<len;i++)
                  {
                      alert(arr[i].id);
                      alert(arr[i].building_num);
                  }
      

  11.   

    我贴出来的就是 debug出来的呀!
      

  12.   

    你用dataType:‘text’, 返回一个标准的json 当然不可能走进success。 直接改成json 返回的json, 用 data.building 就能获取到 不过是个数组,还得继续遍历。