将JSON对象转换为简单数组

时间:2013-07-11 17:56:17

标签: javascript jquery ajax json charts

我有来自此调用的以下嵌套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"
            }
        ]
    }
}

我想遍历每个对象的Title和Hours属性并将它们保存在一个数组中,以便我可以将其传递给google图表,如下所示:

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}); 
}

请给我一些想法,这样我就不会被困在这里剩下的时间。谢谢!

2 个答案:

答案 0 :(得分: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});
    };
});

答案 1 :(得分:0)

好的,我正在回答我自己的问题,以防有人碰到类似的东西。 这是对MS SharePoint站点的ajax调用,返回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作为'data'返回并通过循环遍历每个javascript对象data.d.results[0], data.d.results[1], data.d.results[2]等来访问它们。