2017-06-30 5 views
0

これはAPIの応答のようです。jsonをそのようなAPIレスポンスのキーでマップする方法

{ 
"keys": ["CustomerId", "Name", "Gender"], 
"value": [["1", "Ram", "Male"]] 
} 

角度VM

function Customer(){ 
return this.Customer = { 
     "CustId": "", 
     "Name": "", 
     "Gender": "", 
} 
} 

角度AJAXコール。

$http.get(url) 
     .then(function(data)){ 
      var cust = new Customer(); 
      //for now I am doing this way. 
      cust.Id = data.value[0][0]; 
      cust.Name = data.value[0][1]; 
      cust.Gender = data.value[0][1]; 

     } 

私はインデックスでプロパティをマップしたくありません。

これらのAPIはなく、私のコントロール
には、私は以下のように(応答)キーでプロパティをマップすることができます任意の方法は、あります。

  cust.Id = data.value[0]["CustomerId"]; 
      cust.Name = data.value[0]["Name"]; 
      cust.Gender = data.value[0]["Gender"]; 

大変助かりましたか? 、

$http.get(url) 
    .then(function(data){ 
     var cust = new Customer(); 

     cust.Id = data.value[0][data.keys.indexOf('CustomerId')]; 
     cust.Name = data.value[0][data.keys.indexOf('Name')]; 
     cust.Gender = data.value[0][data.keys.indexOf('Gender')]; 
    }); 

しかしノートこの意志だけの仕事を:私はこのような何かを達成するための見ることができます

+0

方が良いフォーマットされたJSONであるためにあなたのAPIのレスポンスを変更することはできますか?質の高い構造化されたレスポンスではありません。 – Brant

+0

@Brant、ウィッシュ私はできる。しかし、それは私のコントロールにはありません –

答えて

2

唯一の方法は、各キーのインデックスを見つけ、インデックスとして、このようなあなたの値にアクセスするときに使用していますキーと値が一致すれば...私はそれを仮定します。

+0

ありがとう!!本当に便利なので、今すぐアップして、それを受け入れます(誰か他の方法があれば見てみましょう) –

1

あなたはES6を使用することができます場合は、(この貧弱製APIのための)最善の回避策は、そのようパーサ関数を作成するには、次のようになります。

function parseResponse(response) { 
    const {keys, value: objects} = response; 

    return objects.map(object => { 
     const parsedValue = {}; 

     keys.forEach((key, index) => { 
      parsedValue[key] = object[index]; 
     }); 

     return parsedValue; 
    }); 
} 

テスト:

const response = { 
    "keys": ["CustomerId", "Name", "Gender"], 
    "value": [["1", "Ram", "Male"]] 
}; 

parseResponse(response); // Outputs [{CustomerId: "1", Name: "Ram", Gender: "Male"}] 

あなたの場合欲しい、私はES5でそれを作ることができた。ちょうど単語を言う:)


EDIT

ES5バージョン:

function parseResponse(response) { 
    var keys = response.keys; 
    var objects = response.value; 
    var response = []; 

    for (let i = 0; i < objects.length; i++) { 
     var formattedValue = {}; 

     for (let j = 0; j < keys.length; j++) { 
      var key = keys[j]; 
      formattedValue[key] = objects[i][j]; 
     } 

     response.push(formattedValue); 
    } 

    return response; 
} 
+0

ありがとうございます。 –

+0

はい、もちろんです。編集私の答え:)してください、upvoteを忘れないでください! – tiagodws

+1

ありがとう!! &upvoted :) –

関連する問題