JavaScript 对象结构问题

JavaScript Object Structure Issue

我在遍历从上传的文件数据返回的对象时遇到问题,但似乎正在返回的对象结构可能阻止我从响应中的每个对象捕获特定属性,或者我正在误解了我应该如何访问这个对象。当我登录 data.length 时,我得到 995,我认为这是对象响应中的字符数。当我记录 data[prop] 它记录每个单独的字符。

这是我返回的文件对象数据:

[
  {
    "fieldname": "fileUpload",
    "originalname": "Screen Shot 2017-01-08 at 12.23.39 PM.png",
    "encoding": "7bit",
    "mimetype": "image/png",
    "size": 39881,
    "bucket": "test",
    "key": "1/2017-01-23/screen-shot-2017-01-08-at-12.23.39-pm.png",
    "acl": "public-read",
    "contentType": "image/png",
    "contentDisposition": null,
    "storageClass": "STANDARD",
    "metadata": null,
    "location": "https://test.s3.amazonaws.com/1/2017-01-23/screen-shot-2017-01-08-at-12.23.39-pm.png",
    "etag": "\"sfasgltg702o\""
  },
  {
    "fieldname": "fileUpload",
    "originalname": "Screen Shot 2017-01-08 at 12.21.04 PM.png",
    "encoding": "7bit",
    "mimetype": "image/png",
    "size": 58386,
    "bucket": "test",
    "key": "1/2017-01-23/screen-shot-2017-01-08-at-12.21.04-pm.png",
    "acl": "public-read",
    "contentType": "image/png",
    "contentDisposition": null,
    "storageClass": "STANDARD",
    "metadata": null,
    "location": "https://test.s3.amazonaws.com/1/2017-01-23/screen-shot-2017-01-08-at-12.21.04-pm.png",
    "etag": "\"151353j53j51u5j135ju\""
  }
]

jQuery AJAX POST 请求上传文件并返回对象 data:

$.ajax({
            url: '/app/sign',
            type: 'POST',
            data: formData,
            processData: false,
            contentType: false,
            success: function(data){
                console.log('upload successful! ' + data);

                console.log('Just the key ' + data.length);
                for(var prop in data){
                    console.log(data[prop]);
                }
            },
            error: function(error){
                console.log('error ' + JSON.stringify(error));
            }
        });

它只是一个 字符串 JSON 格式。您需要 JSON.parse 转换为 JS 对象,或者使用 $.getJSON().

data 是一个 JSON 字符串,您必须使用 JSON.parse 将其解析回对象数组,如下所示:

success: function(data){
    var arr = JSON.parse(data);

    // use arr as array
    console.log(arr.length);
    // arr[0] is the first object
}

假设您想访问第一个 fieldname,您可以通过这种方式访问​​它 data[0].fieldname。第二个也是如此:data[1].fieldname。为什么 ?因为您的数据是这样解释的:

0: {"fieldname": "fileUpload", ...}, 1: {"fieldname": "fileUpload", ...}