0

一般处理返回的 JSON 数据并将其粘贴到对象中以供其他地方使用的最佳方法是什么(主要作为从巨大的 JSON 对象中提取少量数据的一种方法)?可能具有属性值对象的数据(或没有)?

我有几块返回一些 JSON 的代码,处理该 JSON 以从中提取所需的值,然后准备该数据以输出到 DOM。

可以返回类似于以下内容的数据:

data = [ { "vehiclename" : "Focus",
    "vehiclemake" : "Ford",
    "id" : "123456",
    "val" : { "name" : "meh",
        "datestart" : "May 1"},
    "attch":{ "overview":"abc123"}
}]

我为访问这些数据而创建的代码如下所示:

var processFoo = function (data) {
        var parsedData = JSON.parse(data);
        var returnData = [];
        var len = parsedData.length;
        var i;

        for (i = 0; i < len; i++) {
            returnData[i] = {
                'name':parsedData[i].val.name,
                'date':parsedData[i].val.datestart,
                'overview':parsedData[i].attch.overview === '' ? '-' : parsedData[i].attch.overview,
                'id':parsedData[i].id
            };
        }

        return returnData;
    };

其他代码对不同的数据集执行几乎相同的操作,只是更改了使用的属性和值。例如,数据如下:

data = [ { "cost" : "1000",
    "vehiclemake" : "Ford",
    "id" : "123456",
    "val" : { "model" : "meh",
        "make" : "May 1"}
}]

我会做:

var processBar= function (data) {
        var parsedData = JSON.parse(data);
        var returnData = [];
        var len = parsedData.length;
        var i;

        for (i = 0; i < len; i++) {
            returnData[i] = {
                'model':parsedData[i].val.model,
                'make':parsedData[i].val.make,
                'cost':parsedData[i].cost === '' ? '-' : parsedData[i].cost,
                'id':parsedData[i].id
            };
        }

        return returnData;
    };

我想要做的是创建一些通用的东西来处理这个处理,这样我就不会得到 10 个不同的函数,它们只在它们创建的对象属性和值上有所不同。

我想我可以创建一个通用函数来处理这些数据,它的工作原理如下:

var keys = ['model, 'make', 'cost', 'id'];
var values = ['vehiclename', 'vehiclemake', 'totalcost', 'id'];
var gd = genericProcessData(data, keys, values);

虽然我可以制作一些有效的东西,但在一定程度上,它要求值只是对象属性层次结构中的一个“级别”(不知道在这里使用的正确词)。

所以数据格式如下:

[{ "vehiclename" : "Focus",
    "vehiclemake" : "Ford",
    "id" : "123456"
}]

将工作。

但是数据格式如下:

[{ "vehiclename" : "Focus",
    "vehiclemake" : "Ford",
    "id" : "123456",
    "values" : { "company_id" : "0",
        "completed_by_email" : ""},
}]

是一个问题,因为我不知道如何使用我的通用函数(例如。values.company_id

尝试像下面这样访问它仅在数据像第一个数据示例中那样深一层时才有效……当属性具有更多对象作为其值时,我不知道如何动态访问这些对象:

var genericProcessData = function(data, propertykeys, propertyvals){ var parsedData = JSON.parse(data); 变量返回数据 = []; var len = parsedData.length; var klen = propertykeys.length; 变量 i, j;

    for(i = 0; i < len; i++) {
        returnData[i] = {};
        for(j = 0; j < klen; j++) {
                returnData[i][propertykeys[j]] = parsedData[i][propertyvals[j]];
        }
    }

    return returnData;
};

所以上面将能够访问vehiclemake、vehiclename或id,但无法访问值中的任何内容:

 **[{ "vehiclename" : "Focus",
        "vehiclemake" : "Ford",
        "id" : "123456",
        "values" : { "company_id" : "0",
            "completed_by_email" : ""},
    }]**
4

0 回答 0