1

好的,所以我在创建与 Zendesk 一起使用的应用程序时遇到了很多麻烦。基本上我需要做的是搜索数据库中的所有票并计算每个最终用户有多少票。最终用户是每张工单中的一个文本字段。

所以这就是我所在的位置:

'/api/v2/tickets.json' - 这是 JSON 格式的所有票证的列表 - 它被放入我之后使用的变量'tickets' - 我认为'tickets' 将是一个数组,但现在我没有'不认为是,那么如何遍历它呢?

现在 - 我如何访问此票证文件中的值?例如,如何使用 JavaScript 访问“最终用户”值?

我查看了 Zendesk 的 API 文档,找不到任何有用的东西来让它工作,而且他们的论坛有些死了。希望你们能帮助我,因为我是 JavaScript 的初学者。

好的,这是 JSON 记录的示例:

{"tickets":[{"url":"https://company.zendesk.com/api/v2/tickets/1.json","id":1,"external_id":null,"via":{"channel":"web","source":{"from":{},"to":{},"rel":null}},"created_at":"2012-10-01T16:06:33Z","updated_at":"2012-10-05T19:21:55Z","type":"incident","subject":"This is a sample ticket requested and submitted by you","description":"This is the first comment. Feel free to delete this sample ticket.","priority":"high","status":"closed","recipient":null,"requester_id":270249903,"submitter_id":270249903,"assignee_id":270249903,"organization_id":22242373,"group_id":20363013,"collaborator_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"due_at":null,"tags":["sample","zendesk"],"fields":[{"id":21717236,"value":"10/4/2012"}],"custom_fields":[{"id":21717236,"value":"10/4/2012"}],"satisfaction_rating":null},{"url":"https://company.zendesk.com/api/v2/tickets/2.json","id":2,"external_id":null,"via":{"channel":"email","source":{"from":{"address":"noreply@zendesk.com","name":"Zendesk"},"to":{"address":"support@company.zendesk.com","name":"Binary Stream Helpdesk"},"rel":null}},"created_at":"2012-10-01T16:33:58Z","updated_at":"2012-10-05T17:09:37Z","type":null,"subject":"Tudor Hofnar, here is the test ticket you requested","description":"        Hello! This is a Zendesk ticket. We are going to go through the basic support ticket operation in Zendesk.\n\n        If you are in your email reading this, please click on the link in the header that starts with Ticket #.\n\n        If you are in your Zendesk reading this, you will see the ticket number, the customer who sent this ticket in, and drop down menus that allow you to set things like status and priority. You'll also notice a blank text box below this comment. That is for you to respond. Let's do that:\n\n        1. Write: \"Thanks for this information, please tell me more.\"\n        2. Change the drop-down field labeled Status to \"Pending\"\n\n        If you follow these instructions, you'll get an email response back from us shortly.  You can also always see ticket updates by going back into your unsolved ticket view (click view in the top menu bar).\n","priority":null,"status":"closed","recipient":null,"requester_id":270263553,"submitter_id":270263553,"assignee_id":270249903,"organization_id":null,"group_id":20363013,"collaborator_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"due_at":null,"tags":[],"fields":[{"id":21717236,"value":"10/4/2012"}],"custom_fields":[{"id":21717236,"value":"10/4/2012"}],"satisfaction_rating":null},{"url":"https://company.zendesk.com/api/v2/tickets/3.json","id":3,"external_id":null,"via":{"channel":"email","source":{"from":{"address":"tudor@binarystream.com","name":"Tudor Hofnar"},"to":{"address":"support@company.zendesk.com","name":"Binary Stream Helpdesk"},"rel":null}},"created_at":"2012-10-01T17:08:37Z","updated_at":"2012-10-05T18:15:01Z","type":null,"subject":"test","description":"test\n\nTudor Hofnar","priority":null,"status":"closed","recipient":"support@company.zendesk.com","requester_id":270249903,"submitter_id":270249903,"assignee_id":270249903,"organization_id":22242373,"group_id":20363013,"collaborator_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"due_at":null,"tags":[],"fields":[{"id":21717236,"value":"10/4/2012"}],"custom_fields":[{"id":21717236,"value":"10/4/2012"}],"satisfaction_rating":null},{"url":"https://company.zendesk.com/api/v2/tickets/5.json","id":5,"external_id":null,"via":{"channel":"web","source":{"from":{},"to":{},"rel":null}},"created_at":"2012-10-01T20:26:34Z","updated_at":"2012-10-06T22:39:09Z","type":"incident","subject":"Window for adding account not opening","description":"The add account window is not opening and it is causing a lot of trouble for our team etc....","priority":"normal","status":"closed","recipient":null,"requester_id":271853958,"submitter_id":271853958,"assignee_id":270249903,"organization_id":22284363,"group_id":20363013,"collaborator_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"due_at":null,"tags":["2_2_2","4","ared","end_user_1","var_2"],"fields":[{"id":21704983,"value":"1"},{"id":21708732,"value":"tried this"},{"id":21708742,"value":"1"},{"id":21713331,"value":"10/2/2012"},{"id":21717086,"value":"ared"},{"id":21717236,"value":"10/4/2012"},{"id":21717357,"value":"2_2_2"}],"custom_fields":[{"id":21704983,"value":"1"},{"id":21708732,"value":"tried this"},{"id":21708742,"value":"1"},{"id":21713331,"value":"10/2/2012"},{"id":21717086,"value":"ared"},{"id":21717236,"value":"10/4/2012"},{"id":21717357,"value":"2_2_2"}],"satisfaction_rating":null},{"url":"https://company.zendesk.com/api/v2/tickets/6.json","id":6,"external_id":null,"via":{"channel":"web","source":{"from":{},"to":{},"rel":null}},"created_at":"2012-10-02T21:14:59Z","updated_at":"2012-10-09T18:22:04Z","type":"incident","subject":"Test Ticket","description":"this is a test ticket","priority":"normal","status":"closed","recipient":null,"requester_id":271853958,"submitter_id":271853958,"assignee_id":270249903,"organization_id":22284363,"group_id":20363013,"collaborator_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"due_at":null,"tags":["2_2_2","arcb","end_user_1","var_2"],"fields":[{"id":21704983,"value":"1"},{"id":21708732,"value":"tried this"},{"id":21708742,"value":"1"},{"id":21713331,"value":"10/2/2012"},{"id":21717086,"value":"arcb"},{"id":21717236,"value":"10/2/2012"},{"id":21717357,"value":""},{"id":21728942,"value":null},{"id":21732321,"value":"Test End-User"}],"custom_fields":[{"id":21704983,"value":"1"},{"id":21708732,"value":"tried this"},{"id":21708742,"value":"1"},{"id":21713331,"value":"10/2/2012"},{"id":21717086,"value":"arcb"},{"id":21717236,"value":"10/2/2012"},{"id":21717357,"value":""},{"id":21728942,"value":null},{"id":21732321,"value":"Test End-User"}],"satisfaction_rating":null},{"url":"https://company.zendesk.com/api/v2/tickets/7.json","id":7,"external_id":null,"via":{"channel":"web","source":{"from":{},"to":{},"rel":null}},"created_at":"2012-10-09T20:09:50Z","updated_at":"2012-10-11T18:19:42Z","type":"question","subject":"Testing bookmarks","description":"this is a bookmark test\n","priority":"normal","status":"open","recipient":null,"requester_id":270249903,"submitter_id":270249903,"assignee_id":270249903,"organization_id":22242373,"group_id":20363013,"collaborator_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"due_at":null,"tags":["2010","psm"],"fields":[{"id":21704983,"value":"0"},{"id":21708732,"value":null},{"id":21708742,"value":"1"},{"id":21713331,"value":"10/9/2012"},{"id":21717086,"value":"psm"},{"id":21717236,"value":"10/31/2012"},{"id":21717357,"value":"2010"},{"id":21728942,"value":"Var 1"},{"id":21732321,"value":"End User 2"}],"custom_fields":[{"id":21704983,"value":"0"},{"id":21708732,"value":null},{"id":21708742,"value":"1"},{"id":21713331,"value":"10/9/2012"},{"id":21717086,"value":"psm"},{"id":21717236,"value":"10/31/2012"},{"id":21717357,"value":"2010"},{"id":21728942,"value":"Var 1"},{"id":21732321,"value":"End User 2"}],"satisfaction_rating":null}],"next_page":null,"previous_page":null,"count":6}

不知道如何格式化此代码...

现在这是我的 JS 代码,我知道我试图用“票”做的事情是错误的,但我不知道如何访问它......

(function() {

  return {
    // Here we define AJAX calls
    requests: {
      fetchTickets: function() {
        return {
          url: '/api/v2/tickets.json',
          type: 'GET'
        };
      }
    },
    // Here we define events such as a user clicking on something
    events: {
      'app.activated': 'requestTickets',

      'fetchTickets.always': function(data) {
        this.countEndUserTickets((data || {}).tickets);
      }
    },
    // Below this point, you're free to define your own functions used by the app   
    requestTickets: function() {
      this.ajax('fetchTickets');
    },

    countEndUserTickets: function(tickets) {
      var endUser = this.ticket().customField("End-User"); //this will get the end-user of the current ticket that is open in Zendesk
      var ticketCounter = 0;

      //this is where I have no idea how to access the 'tickets' array or whatever it is
      for (var i = 0; i <= tickets.length; i++) {
        if (tickets[i].customField("End-User") == endUser){
          ticketCounter = ticketCounter + 1;
        }
      }

      alert(endUser);

      this.switchTo('list', {
        ticketCounter: this.ticketCounter
      });
    }
  };  
}());
4

6 回答 6

2

根据他们的文档,Zendesk 支持 JSONP:

您可以通过将“?callback=your_call_back_function”附加到 GET URL 来指定回调

因此,您可以将您的 url 更改为'/api/v2/tickets.json?callback=fetchTicketsCallback'并将fetchTicketsCallback被调用,并传入一个完全解析的 JavaScript 对象。

编辑:实际上,根据这个文档(看起来很像您发布的代码),Zendesk ajax 处理程序接收完全解析的 JavaScript 对象,而不是原始 JSON 字符串。因此,根本没有理由更改网址。只需通过标准点或方括号表示法访问成员。因此,要使用 of 获取字段的id21732321

ticket.fields.filter(function(field) {
    return field.id == 21732321;
})[0].value;

看起来你想要:

function countTickets(user) {
    var count = 0;
    response.tickets.forEach(function(ticket) {
        var filteredFields = ticket.fields.filter(function(field) {
            return field.id == 21732321;
        });
        if (filteredFields.length > 0 && filteredFields[0].value == user) {
            count++;
        }
    });
    return count;
}

http://jsfiddle.net/azRJM/

于 2012-10-11T20:03:50.117 回答
1

jQuery 让 jQuery.parseJSON 变得非常简单 这是一个简单的例子:http ://api.jquery.com/jQuery.parseJSON/

于 2012-10-11T19:44:58.107 回答
1

试试这个:

var json = '{ "url":"https://test.zendesk.com/api/v2/tickets/6.json", "id":6, "external_id":null, "via":{ "channel":"web", "source":{ "from":{}, "to":{}, "rel":null } }, "created_at":"2012-10-02T21:14:59Z", "updated_at":"2012-10-09T18:22:04Z", "type":"incident", "subject":"Test Ticket", "description":"this is a test ticket", "priority":"normal", "status":"closed", "recipient":null, "requester_id":271853958, "submitter_id":271853958, "assignee_id":270249903, "organization_id":22284363, "group_id":20363013, "collaborator_ids":[], "forum_topic_id":null, "problem_id":null, "has_incidents":false, "due_at":null, "tags":["2_2_2","arcb","end_user_1","var_2"], "fields":[ {"id":21704983,"value":"1"}, {"id":21708732,"value":"tried this"}, {"id":21708742,"value":"1"}, {"id":21713331,"value":"10/2/2012"}, {"id":21717086,"value":"arcb"}, {"id":21717236,"value":"10/2/2012"}, {"id":21717357,"value":""}, {"id":21728942,"value":null}, {"id":21732321,"value":"Test End-User"}], "custom_fields":[{"id":21704983,"value":"1"}, {"id":21708732,"value":"tried this"}, {"id":21708742,"value":"1"}, {"id":21713331,"value":"10/2/2012"}, {"id":21717086,"value":"arcb"}, {"id":21717236,"value":"10/2/2012"}, {"id":21717357,"value":""}, {"id":21728942,"value":null}, {"id":21732321,"value":"Test End-User"}], "satisfaction_rating":null }';

var obj = JSON.parse(json);
$('body').append('<div>Tags value: ' + obj.tags + '</div><br>');
var len = obj.custom_fields.length;

for(n = 0; n < len; n++)
{
    $('body').append('<div>Custom field value: ' + obj.custom_fields[n].value + '</div>');
}

​</p>

看看它在行动:http: //jsfiddle.net/7nbpq/5/

于 2012-10-11T19:49:29.790 回答
0

尝试在服务器端返回使用 json_encode(),和/或在客户端接收数据时使用 jQuery.parseJSON()。这应该允许您获取数组中的数据,这将有很大帮助。

于 2012-10-11T19:45:50.963 回答
0

首先,您应该使用 $.getJSON - 它是$.ajax function 的简写,专门用于检索 JSON:

$.getJSON('myfile.json', function(json) {

    // do something with json here 
});

其次,一旦有了 json,就可以使用点运算符访问它 - 无需解析它,因为它已经是一个对象。

于 2012-10-11T19:48:37.760 回答
0

这可能会帮助您进行 JSON 检索和访问结果对象

在此处尝试 使用控制台查看 console.log() 输出(在 Chrome 中按 F12,或在 FireFox 中使用 FireBug 等):

JavaScript:

$(document).ready(function () {
    "use strict";
    $.getJSON("getJSON.json", function (data) {
        $("#look").on('click', function () {
            var $output = $("#output");
            var index, id = $("#input").val();
            var filtered = data.custom_fields.filter(function (element) {
                return element.id.toString() == id;
            });
            $output.empty();
            for (index in filtered) {
                $output.append("Value: " + filtered[index].value);
            }
            console.log(filtered);
        });
        console.log(data);
    });
});

HTML:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
</head>
<body>
    Pleased input a custom field ID:  <input id="input" type="text" value="21732321" />
    <button id="look">Look Up By ID</button>
    <p id="output"></p>
<script type="text/javascript" src="getJSON.js"></script>
</body>
</html>

JSON(这是您在此处验证和格式化的 JSON ):

{
    "url": "https://test.zendesk.com/api/v2/tickets/6.json",
    "id": 6,
    "external_id": null,
    "via": {
        "channel": "web",
        "source": {
            "from": {},
            "to": {},
            "rel": null
        }
    },
    "created_at": "2012-10-02T21:14:59Z",
    "updated_at": "2012-10-09T18:22:04Z",
    "type": "incident",
    "subject": "Test Ticket",
    "description": "this is a test ticket",
    "priority": "normal",
    "status": "closed",
    "recipient": null,
    "requester_id": 271853958,
    "submitter_id": 271853958,
    "assignee_id": 270249903,
    "organization_id": 22284363,
    "group_id": 20363013,
    "collaborator_ids": [],
    "forum_topic_id": null,
    "problem_id": null,
    "has_incidents": false,
    "due_at": null,
    "tags": [
        "2_2_2",
        "arcb",
        "end_user_1",
        "var_2"
    ],
    "fields": [
        {
            "id": 21704983,
            "value": "1"
        },
        {
            "id": 21708732,
            "value": "tried this"
        },
        {
            "id": 21708742,
            "value": "1"
        },
        {
            "id": 21713331,
            "value": "10/2/2012"
        },
        {
            "id": 21717086,
            "value": "arcb"
        },
        {
            "id": 21717236,
            "value": "10/2/2012"
        },
        {
            "id": 21717357,
            "value": ""
        },
        {
            "id": 21728942,
            "value": null
        },
        {
            "id": 21732321,
            "value": "Test End-User"
        }
    ],
    "custom_fields": [
        {
            "id": 21704983,
            "value": "1"
        },
        {
            "id": 21708732,
            "value": "tried this"
        },
        {
            "id": 21708742,
            "value": "1"
        },
        {
            "id": 21713331,
            "value": "10/2/2012"
        },
        {
            "id": 21717086,
            "value": "arcb"
        },
        {
            "id": 21717236,
            "value": "10/2/2012"
        },
        {
            "id": 21717357,
            "value": ""
        },
        {
            "id": 21728942,
            "value": null
        },
        {
            "id": 21732321,
            "value": "Test End-User"
        }
    ],
    "satisfaction_rating": null
}
于 2012-10-18T04:01:36.073 回答