0

私は次のような複雑なJSONオブジェクトを持っています:

var requestData = { __batchRequests: [ { __changeRequests: [
{ requestUri: "Customers", method: "POST", headers: { "Content-ID": "1" }, data: { 
    CustomerID: 400, CustomerName: "John"
}  }
] } ] };           

私は2つのことをしようとしています:

  1. このオブジェクトを宣言しますが、変数データは空です

  2. ループを使用して、データオブジェクトにアイテムを動的に追加します。

どうすればいいですか?

4

2 に答える 2

1

data質問の最初の部分では、空の連想配列で初期化できます。

var requestData = { __batchRequests: [ { __changeRequests: [
{ requestUri: "Customers", method: "POST", headers: { "Content-ID": "1" }, data: {}  }
] } ] };    

この次の部分では、おそらく間違って、jQueryを使用できると想定しています。また、関連するすべてのキーと値のペアを含む配列があることも前提としています。

var customerDeetsArray =[{CustomerID: 400}, {CustomerName: "John"}]; 

for (var i in customerDeetsArray) {
  requestData.data = $.extend(requestData.data, customerDeetsArray[i]);
}

console.debugを使用する実際の例を参照してください。

http://jsfiddle.net/4Rh72/6/

于 2012-09-11T23:59:44.490 に答える
1

これはそれほど複雑なオブジェクトではありません。そして、文字列に変換されるまでJSONではありません。今のところ、それは単なる昔ながらのJSオブジェクトと配列です。

それを要素に分解すると、次のようになります。

var requestData = {};
requestData.__batchRequests = [];
requestData.__batchRequests[0] = {};
requestData.__batchRequests[0].__changeRequests = [];
requestData.__batchRequests[0].__changeRequests[0] = {};
requestData.__batchRequests[0].__changeRequests[0].requestUri = "Customers";
requestData.__batchRequests[0].__changeRequests[0].method = "POST";
requestData.__batchRequests[0].__changeRequests[0].headers = { "Content-ID" : "1" };
requestData.__batchRequests[0].__changeRequests[0].data = {};

リピートは別として、あなたは何を見ますか?個人的には、それ__changeRequests[0]は次のような単純なオブジェクトだと思います。

var changeRequest = {
    requestUri : "Customers",
    method : "POST",
    headers : { "Content-ID" : "1" },
    data : {}
};

また、それを変更要求の配列にプッシュできることもわかります。

requestData.__batchRequests[0].__changeRequests.push(changeRequest);

右?

また、変数が配列に追加したばかりの変数を指していることもわかっていchangeRequestます。オブジェクトで変更したものはすべて、配列のオブジェクトへの参照でも変更されたものとして表示されます。

changeRequest.data.CustomerName = "Bob";
changeRequest.data.CustomerID = "204";


requestData.__/*...*/changeRequests[0].data.CustomerName; // Bob

では、ヘルパー関数を自分で作成してみませんか?

function extend (obj, additions) {
    var key;
    for (key in obj) { if (additions.hasOwnProperty(key)) {
        obj[key] = additions[key];
    }
}

function makeChangeRequest (url, method, headers, data) {
    var request = {
        requestUri : url,
        method : method,
        headers : {},
        data : {}
    };

    extend(request.headers, headers);
    extend(request.data, data);

    return request;
}

function getBatch (num) { return requestData.__batchRequests[num]; }


var changeReq = makeChangeRequest("Customers",
                                  "POST",
                                  { "Content-ID" : "1" },
                                  { CustomerName : "Bob", CustomerID : "2012" });

var batch = getBatch(0);

batch.__changeRequests.push(changeReq);

後でさらにデータを追加する場合changeReq.data

extend(changeReq.data, { Address : "33 Nowhere Rd.", City : "Splitsville" });
于 2012-09-12T00:32:43.610 に答える