json 到 javascript 变量 zendesk

json to javascript variable zendesk

我正在尝试从 zendesk api 中检索特定用户的未结票证数量。但是我似乎无法让它工作。我不断收到此错误:

Uncaught TypeError: Cannot read property '500' of undefined

json格式:

{
"user": {
    "id": 500,
    "url": "https://zendesk/api/v2/users/500.json",
    "name": "Random name",
    "email": "not important",
    "created_at": "2016-05-18T15:26:43Z",
    "updated_at": "2018-07-04T06:23:35Z",
    "time_zone": "Brussels",
    "phone": null,
    "shared_phone_number": null,
    "photo": {
        "url": "https://google.com",
        "id": 504,
        "file_name": "keep-calm-and-shut-up-im-your-system-administrator.png",
        "content_url": "https://google.com",
        "mapped_content_url": "https://google.com",
        "content_type": "image/png",
        "size": 3298,
        "width": 80,
        "height": 50,
        "inline": false,
        "thumbnails": [
            {
                "url": "https://google.com",
                "id": 90752965,
                "file_name": "not important",
                "content_url": "https://google.com",
                "mapped_content_url": "https://google.com",
                "content_type": "image/png",
                "size": 3298,
                "width": 32,
                "height": 20,
                "inline": false
            }
        ]
    },
    "locale_id": 1005,
    "locale": "nl",
    "organization_id": 501,
    "role": "admin",
    "verified": true,
    "external_id": null,
    "tags": [],
    "alias": "",
    "active": true,
    "shared": false,
    "shared_agent": false,
    "last_login_at": "2018-07-04T06:23:35Z",
    "two_factor_auth_enabled": null,
    "signature": "",
    "details": "",
    "notes": "",
    "role_type": null,
    "custom_role_id": null,
    "moderator": true,
    "ticket_restriction": null,
    "only_private_comments": false,
    "restricted_agent": false,
    "suspended": false,
    "chat_only": false,
    "default_group_id": 503,
    "user_fields": {
        "agent_ooo": false
    }
},
"open_ticket_count": {
    "500": 15
}}

这是我的 javascript 代码:

        <script>
    function getJSON(url) {
    var resp ;
    var xmlHttp ;

    resp  = '' ;
    xmlHttp = new XMLHttpRequest();

    if(xmlHttp != null)
    {
        xmlHttp.open( "GET", url, false );
        xmlHttp.send( null );
        resp = xmlHttp.responseText;
    }

    return resp ;
}
   var gjson ;
    gjson = getJSON('https://zendesk.com//api/v2/users/me.json? 
    include=open_ticket_count');

console.log(gjson.open_ticket_count["500"]);

</script>

有人可以帮帮我吗?我不确定我做错了什么(zendesk url 是实际脚本中的正确 url,他们可以访问它)

TLDR:我需要从 open_ticket_count 从 json 检索变量。

谢谢!

如果没有其他环境,很难说准确,但我认为这会起作用:

    var gjson ;
    gjson = getJSON('https://zendesk.com//api/v2/users/me.json?include=open_ticket_count'');
    var jsonObj = JSON.parse(gjson); // assuming getJSON returns the json as string, this is async, make sure next row has the data needed on time or rewqork this as promise
    console.log(jsonObj.open_ticket_count["500"]);

所以基本上调用了整个JSON,然后将它从字符串解析为对象,然后像对象一样使用它

您的 getJSON 函数不会等待请求实际通过。像这样的函数将 return responseText 只有在它完成后才会:

const getJSON = function(url, callback) {
    let xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType = 'json';
    xhr.onload = function() {
      let status = xhr.status;
      if (status === 200) {
        callback(null, xhr.response);
      } else {
        callback(status, xhr.response);
      }
    };
    xhr.send();
};

然后您可以使用它来获取 Zendesk JSON:

getJSON('https://zendesk.com//api/v2/users/me.json?include=open_ticket_count', (status, gjson) => {
    console.log(gjson.open_ticket_count["500"]);
});

线索在错误中

Uncaught TypeError: Cannot read property '500' of undefined

这表示 gjson.open_ticket_count 未定义。

您实际上还没有解析 JSON 并试图获取未解析 JSON.

的字符串的 属性

先尝试解析它。

var gjson;
gjson = getJSON('https://zendesk.com//api/v2/users/me.json?include=open_ticket_count');
var gobj = JSON.parse(gjson);
console.log(gobj.open_ticket_count["500"]);

您需要解析 JSON 才能访问它。使用下面的代码

<script>
    function getJSON(url) {
       var resp ;
       var xmlHttp ;

       resp  = '' ;
       xmlHttp = new XMLHttpRequest();

       if(xmlHttp != null)
       {
           xmlHttp.open( "GET", url, false );
           xmlHttp.send( null );
           resp = xmlHttp.responseText;
       }

       return resp ;
    }

    var gjson ;
    gjson = getJSON('https://zendesk.com//api/v2/users/me.json? 
    include=open_ticket_count');

    gjson = JSON.parse(gjson)

    console.log(gjson.open_ticket_count["500"]);

</script>