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);

そして、機能するものをある程度作成することはできますが、値がオブジェクト プロパティ階層の深い 1 つの "レベル" (ここで使用する正しい単語がわからない) だけである必要があります。

したがって、データは次のようにフォーマットされます。

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

動作します。

ただし、データは次のようにフォーマットされています。

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

ジェネリック関数 (ex.values.company_id

次のようにアクセスしようとしても、最初のデータ例のようにデータが 1 レベルの深さである場合にのみ機能します...プロパティが値としてさらにオブジェクトを持っている場合、これらに動的にアクセスする方法がわかりません:

var genericProcessData = function(data, propertykeys, propertyvals){ var parsedData = JSON.parse(data); var returnData = []; var len = parsedData.length; var klen = propertykeys.length; var 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