如何转换JSON并将其存储在变量中?

时间:2016-01-27 04:56:20

标签: json arcgis arcgis-js-api

我在.../arcgisserver/rest/services/CRD/CRD2/FeatureServer/0中有JSON数据。 我想解析它并将其存储在变量中。为此,我使用下面的代码:

esri.request({  
        url:baseURL,   
        content:{f:"json"},  
        callbackParamName:"callback",  
        load:getServiceDetails,   
        error:esriConfig.defaults.io.errorHandler  
    });  

function getServiceDetails(response, args) {
    alert(response);
    var info = [];
    dojo.forEach(response.folders, function (folder) {
        info.push("Folder: " + folder + "<br/>");
    });
    dojo.forEach(response.services, function (service) {
        info.push("Service Details: " + service.name + " " + service.type + "<br/>");

    });
    console.log(info);

但是info是空的。我的代码中有什么错误?

1 个答案:

答案 0 :(得分:2)

我已根据您在以下评论中的说明修改了此答案。

您的代码尝试执行的操作是列出rest services存储库文件夹中的所有文件夹和服务。该文件夹的url是您的baseURL变量。问题是你的baseURL变量设置为

http://yourserver/arcgisserver/rest/services/CRD/CRD2/FeatureServer/0

,这实际上不是文件夹的地址,而是特定要素服务的地址。要素服务具有不同的响应参数。变量文件夹和服务对于服务毫无意义,因为它不包含文件夹或服务,但在这种情况下是功能描述。例如,如果您希望查询要素类并了解其属性,请保持您的baseURL不变,并用

替换forEach循环。
dojo.forEach(response.fields, function (field) {
        info.push("Field: " + field.name + "<br/>");

您将获得包含功能字段名称的列表(应该可以使用,而不是测试)。

但是,如果您的目标是列出您的休息服务存储库中的所有文件夹和服务,则必须将baseURL更改为以下内容:

http://yourserver/arcgisserver/rest/services

您的代码应该有效。

提示:当您在浏览器中输入带有f=json参数的网址时,您可以始终检查您的响应状态。像这样:

http://yourserver/arcgisserver/rest/services?f=json

您将收到一个json响应,您可以检查是否包含所需的属性。