Tableau Web数据连接器错误

时间:2017-11-07 15:20:29

标签: javascript json tableau

我正在根据文档HERE创建Tableau Web数据连接器。

我正在运行模拟器,并设置了一个HTML页面(根据教程)调用运行Tableau WDC脚本的Javascript文件,如下所示。

(function () {
    var myConnector = tableau.makeConnector();

    myConnector.init = function(initCallback) {
        initCallback();
        tableau.submit();
    };

    myConnector.getSchema = function (schemaCallback) {
        var cols = [
            { id : "date_of_work", alias : "Date of Work", dataType: tableau.dataTypeEnum.date },
            { id : "supervisor", alias : "Supervisor", dataType: tableau.dataTypeEnum.string }
        ];

        var tableInfo = {
            id : "test",
            alias : "test",
            columns : cols
        };

        schemaCallback([tableInfo]);
    };

    myConnector.getData = function (table, doneCallback) {
        $.getJSON("http://myDataCall.php", function(response) { 
            // ERROR HERE!  
            var resp = response.job.job_workflows; // Response
            var parsedResp = JSON.parse(resp); // Parse the response
            var tableData = []; // Temp array

            // Iterate over the JSON object
            for (var i = 0, len = resp.length; i < len; i++) {
                tableData.push({
                    "date_of_work": parsedResp[i]['job_status'],
                    "supervisor": parsedResp[i]['job_workflow_1197927'],

                });
            }

            table.appendRows(tableData);
            doneCallback();
        });
    };

    tableau.registerConnector(myConnector);
})();

当我运行脚本时,我收到错误:WDC报告错误: Uncaught SyntaxError:位置1堆栈中JSON中的意外标记o:SyntaxError: 在Object.Success的JSON.parse()位置1的JSON中出现意外的标记o

正在返回的(缩写)JSON如下所示:

{
    "employee": {
        "id": 23940,
    },
    "company": {
        "id": 1059,
    },
    "job": {
        "id": 13712707,
        "job_status_logs": [{
            "id": 17330391,
        }],
        "company": {
            "id": 1059,
        },
        "created_by": {
            "id": 23940,
        },
        "job_workflows": [{
            "id": 1087689283,
            "job_id": 13712707,
            "employee_id": null,
            "template_workflow_id": 1251218,
            "name": "Date of work",
            "action": "datepicker",
            "optional": 0,
            "action_values": "",
            "action_value_entered": "2017-10-12",
            "nested_workflow_id": 0,
        }, {
            "id": 1087689284,
            "job_id": 13712707,
            "employee_id": null,
            "template_workflow_id": 1251219,
            "name": "Supervisor",
            "action": "list",
            "optional": 0,
            "action_values": "John Doe",
            "action_value_entered": "John Doe",
            "nested_workflow_id": 0,
        }],
        "job_fields": [{
            "id": 50456098,
        }],
        "job_status_change_messages": [{
            "id": 59957985}],
        "job_assets":[]
    }
}

我正在尝试访问 job.job_workflows.action_value_entered 值,但仍然会出现上述错误。

如何解决此错误?

1 个答案:

答案 0 :(得分:0)

这里有几个问题。

1)从您的服务器发回的JSON无效。这是有效版本。我建议使用https://jsonformatter.curiousconcept.com/之类的网站来验证您的JSON。

{
    "employee": {
        "id": 23940
    },
    "company": {
        "id": 1059
    },
    "job": {
        "id": 13712707,
        "job_status_logs": [{
            "id": 17330391
        }],
        "company": {
            "id": 1059
        },
        "created_by": {
            "id": 23940
        },
        "job_workflows": [{
            "id": 1087689283,
            "job_id": 13712707,
            "employee_id": null,
            "template_workflow_id": 1251218,
            "name": "Date of work",
            "action": "datepicker",
            "optional": 0,
            "action_values": "",
            "action_value_entered": "2017-10-12",
            "nested_workflow_id": 0
        }, {
            "id": 1087689284,
            "job_id": 13712707,
            "employee_id": null,
            "template_workflow_id": 1251219,
            "name": "Supervisor",
            "action": "list",
            "optional": 0,
            "action_values": "John Doe",
            "action_value_entered": "John Doe",
            "nested_workflow_id": 0
        }],
        "job_fields": [{
            "id": 50456098
        }],
        "job_status_change_messages": [{
            "id": 59957985}],
        "job_assets":[]
    }
}

2)jQuery的getJson方法返回一个对象,因此你不需要解析它。您可以直接使用resp变量:

    var resp = response.job.job_workflows; // Response
    var tableData = []; // Temp array

    // Iterate over the JSON object
    for (var i = 0, len = resp.length; i < len; i++) {
        tableData.push({
            "date_of_work": resp[i]['job_status'],
            "supervisor": resp[i]['job_workflow_1197927'],

        });
    }

    table.appendRows(tableData);
    doneCallback();

解决这两个问题应该解锁你。但是,您需要考虑要发回的数据。您发送回的当前值在JSON中不存在(即resp[i]['job_workflow_1197927'])。

相反,您可以执行以下操作:resp[1].job_id,它将为您提供每个job_workflow的job_id。