2013-07-11 21 views
-1

我有以下的嵌套JSON对象从这个函数来:转换JSON对象,以一个简单的数组

var jsonData = jQuery.ajax({ 
      url: "http://testsite/_vti_bin/listdata.svc/ProjectHours", 
      dataType: "json", 
      async: false 
     }).responseText; 

{ 
    "d": { 
     "results": [ 
      { 
       "__metadata": { 
        "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(1)", 
        "etag": "W/\"1\"", 
        "type": "Microsoft.SharePoint.DataService.ProjectHoursItem" 
       }, 
       "ContentTypeID": "0x0100C5D130A92A732D4C9E8489B50657505B", 
       "Title": "Ryan Cruz", 
       "Hours": 35, 
       "Id": 1, 
       "ContentType": "Item", 
       "Modified": "/Date(1373535682000)/", 
       "Created": "/Date(1373535682000)/", 
       "CreatedBy": { 
        "__deferred": { 
         "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(1)/CreatedBy" 
        } 
       }, 
       "CreatedById": 19, 
       "ModifiedBy": { 
        "__deferred": { 
         "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(1)/ModifiedBy" 
        } 
       }, 
       "ModifiedById": 19, 
       "Owshiddenversion": 1, 
       "Version": "1.0", 
       "Attachments": { 
        "__deferred": { 
         "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(1)/Attachments" 
        } 
       }, 
       "Path": "/sites/itg/Resourcecenters/spwidgets/Lists/ProjectHours" 
      }, 
      { 
       "__metadata": { 
        "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(2)", 
        "etag": "W/\"1\"", 
        "type": "Microsoft.SharePoint.DataService.ProjectHoursItem" 
       }, 
       "ContentTypeID": "0x0100C5D130A92A732D4C9E8489B50657505B", 
       "Title": "Phillip Phillips", 
       "Hours": 25, 
       "Id": 2, 
       "ContentType": "Item", 
       "Modified": "/Date(1373535694000)/", 
       "Created": "/Date(1373535694000)/", 
       "CreatedBy": { 
        "__deferred": { 
         "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(2)/CreatedBy" 
        } 
       }, 
       "CreatedById": 19, 
       "ModifiedBy": { 
        "__deferred": { 
         "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(2)/ModifiedBy" 
        } 
       }, 
       "ModifiedById": 19, 
       "Owshiddenversion": 1, 
       "Version": "1.0", 
       "Attachments": { 
        "__deferred": { 
         "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(2)/Attachments" 
        } 
       }, 
       "Path": "/sites/itg/Resourcecenters/spwidgets/Lists/ProjectHours" 
      } 
     ] 
    } 
} 

我想通过每个对象的标题环和时间属性,并将它们保存在的阵列,所以我可以将其传递给谷歌图表如下所示:

var data = google.visualization.arrayToDataTable(array); 

我尝试下面的代码,但它不能找到JSON对象:

function drawTable() { 
    var jsonData = jQuery.ajax({ 
       url: "http://testsite/_vti_bin/listdata.svc/ProjectHours", 
       dataType: "json", 
       async: false 
      }).responseText; 

      alert(jsonData); 
      var obj = jQuery.parseJSON(jsonData); 
      //alert(jsonData.length); 
      var sampleData = [], results = d.results; 
      for (var i = 0, len = results.length; i < len; i++) { 
       var result = results[i]; 
       sampleData.push({ Title: result.Title, Hours: result.Hours}); 
      } 

      var data = google.visualization.arrayToDataTable(obj); 
      var chart = new google.visualization.PieChart(document.getElementById('spChart')); 
      chart.draw(data, {showRowNumber: true}); 
} 

请给我一些想法,以便我在这一天的其余时间不会卡在这里。谢谢!

+0

JSON回调的范围内是否存在循环结构? – DevlshOne

+0

你怎么定义'd'? –

+0

@DevlshOne没有JSON回调。他使用'async:false'和'responseText'(这是可怕的imo,但不是问题) –

回答

2
jQuery.getJSON({"http://testsite/_vti_bin/listdata.svc/ProjectHours",{},function(d) { 
    var sampleData = [], results = d.results; 
    for (var i = 0, len = results.length; i < len; i++) { 
     var result = results[i]; 
     sampleData.push({ Title: results[i].Title, Hours: results[i].Hours}); 
    }; 
}); 
+0

这对你有用吗? – DevlshOne

+0

我不明白空的{}参数part..can你可以向我解释这是如何连接起来的,所以我可以实现自己 – Athapali

+0

'.getJSON()'方法中的那个地方保留用于向URL发送数据。我可能也可以在那里放置一个'null',但习惯总是把空括号放进去。 – DevlshOne

0

好的,我在这里回答我自己的问题,以防有人跑过类似的东西。 这是一个Ajax调用MS JSON站点返回JSON列表数据。

jQuery.ajax({ 
     url: "http://testsite/_vti_bin/listdata.svc/ProjectHours", 
     dataType: 'JSON', 
     success:function(data) { 
      //jQuery('#spChart').append(JSON.stringify(json)); 
     //var obj = jQuery.parseJSON(data); 
     var rowArray = [], results = data.d.results; 

     for (var i=0; i < results.length; i++) 
     { 
      var result = results[i];   
      rowArray.push([result.Title, result.Hours]); 
      //rowArray.push(["'" + result.Title + "'", result.Hours]); 
     } 

    }, 
     error:function(){ 
      alert("Error"); 
     } 
    }); 

我不得不先参阅返回的JSON作为“数据”并通过它们中的每循环访问它的内部各javascript对象为data.d.results[0], data.d.results[1], data.d.results[2]等。