2017-09-18 14 views
1

私はWEB APIを使用しています。サーバーからJSONレスポンスを受け取りました。返されたレスポンスを別のJSONに変更して、別のテーブルとグラフを表示します。 javacriptのJSONレスポンスを変更する

この

は、サーバー

{"data":[{"id":3663101,"lstImeis":[{"number":"14370340908558","maxDate":"2017-08-24 22:08:58.0","minDate":"2017-08-24 22:08:58.0"},{"number":"22418344742097","maxDate":"2017-08-24 18:08:56.0","minDate":"2017-08-24 18:08:56.0"}],"number2":789},{"id":3665337,"lstImeis":[{"number":"48717031235502","maxDate":"2017-08-24 21:09:38.0","minDate":"2017-08-24 21:09:38.0"},{"number":"42540009239622","maxDate":"2017-08-24 16:35:08.0","minDate":"2017-08-24 16:35:08.0"},{"number":"42540009239644","maxDate":"2017-08-24 16:35:08.0","minDate":"2017-08-24 16:35:08.0"}],"number2":456}]} 

からの応答であり、私はこのように見て、この応答を変換する必要があります、

{"data":[{"id":3663101,"number":"14370340908558","maxDate":"2017-08-24 22:08:58.0","minDate":"2017-08-24 22:08:58.0","number2":789},{"id":3663101,"number":"22418344742097","maxDate":"2017-08-24 18:08:56.0","minDate":"2017-08-24 18:08:56.0","number2":789},{"id":3665337,"number":"48717031235502","maxDate":"2017-08-24 21:09:38.0","minDate":"2017-08-24 21:09:38.0","number2":456},{"id":3665337,"number":"42540009239622","maxDate":"2017-08-24 16:35:08.0","minDate":"2017-08-24 16:35:08.0","number2":456},{"id":3665337,"number":"42540009239644","maxDate":"2017-08-24 16:35:08.0","minDate":"2017-08-24 16:35:08.0","number2":456}]} 

これは私がこれまでに行ったことある

var data = new Array(); 
var str = '{"data":[{"id":3663101,"lstImeis":[{"number":"14370340908558","maxDate":"2017-08-24 22:08:58.0","minDate":"2017-08-24 22:08:58.0"},{"number":"22418344742097","maxDate":"2017-08-24 18:08:56.0","minDate":"2017-08-24 18:08:56.0"}],"number2":789},{"id":3665337,"lstImeis":[{"number":"48717031235502","maxDate":"2017-08-24 21:09:38.0","minDate":"2017-08-24 21:09:38.0"},{"number":"42540009239622","maxDate":"2017-08-24 16:35:08.0","minDate":"2017-08-24 16:35:08.0"},{"number":"42540009239644","maxDate":"2017-08-24 16:35:08.0","minDate":"2017-08-24 16:35:08.0"}],"number2":456}]}'; 
var response = JSON.parse(str); 
var tableData = response.data; 
var dataLength = response.data.length; 

for (i = 0; i < dataLength; i++) { 
    var obj = {}; 
    obj["id"] = tableData[i].id; 
    for (a = 0; a < tableData[i].lstImeis.length; a++) { 
     obj["number"] = tableData[i].lstImeis[a].number, 
     obj["maxDate"] = tableData[i].lstImeis[a].maxDate, 
     obj["minDate"] = tableData[i].lstImeis[a].minDate 
    } 
    obj["number2"] = tableData[i].number2; 
    data.push(obj); 
} 
console.log(JSON.stringify(data)); 

ここにはJSFIDDLE

外部ループは罰金を働きますが、内部ループは最後に更新されたデータを与えます。与えられたデータと変更されたデータを見ると、違いがわかります。 inner forループの値をオーバーライドし、最後の値のみをobjに追加する理由は何ですか?

答えて

4

あなたのロジックはライン

var obj = {}; 
obj["id"] = tableData[i].id; 

は、内側のループ内にある必要がありますが正しくありません。また、ライン

obj["number2"] = tableData[i].number2; 
data.push(obj); 

は内側のループの内側に移動する必要があります。 はここに改善し、作業コードhttps://jsfiddle.net/dmtfxt35/4/

var response = JSON.parse(str); 
var tableData = response.data; 
var finalObj = {data:[]}; 
for (var i in tableData){ 
    for(var a in tableData[i].lstImeis){ 
    var tmpObj = {}; 
    tmpObj['id'] = tableData[i].id; 
    tmpObj["number"] = tableData[i].lstImeis[a].number; 
    tmpObj["maxDate"] = tableData[i].lstImeis[a].maxDate; 
    tmpObj["minDate"] = tableData[i].lstImeis[a].minDate; 
    tmpObj["number2"] = tableData[i].number2; 
    finalObj.data.push(tmpObj); 
    } 
} 
console.log(JSON.stringify(finalObj)); 

私はこれが助けを願っています。

+0

おかげで、それは動作します –

0

これを見てくださいFiddle。最後に更新されたobjデータをプッシュしていました。あなたはそれを更新するたびにobjをプッシュする必要がありました。

for(i = 0; i < dataLength; i++){  
    for(a = 0; a < tableData[i].lstImeis.length; a++){ 
    var obj = {}; 
    obj["id"] = tableData[i].id; 
    obj["number"] = tableData[i].lstImeis[a].number; 
    obj["maxDate"] = tableData[i].lstImeis[a].maxDate; 
    obj["minDate"] = tableData[i].lstImeis[a].minDate; 
    obj["number2"] = tableData[i].number2; 
    data.push(obj); 
    }  
} 
1

配列にデータを挿入するときに、同じobj変数を使用しています。

Objはdictでループ上で更新されています。

私はあなたがarray#reducearray#mapを使用することができます要件

<script> 
 
var data = new Array(); 
 
var str = '{"msg":"success","code":"200","status":null,"data":[{"id":3663101,"lstImeis":[{"number":"14370340908558","maxDate":"2017-08-24 22:08:58.0","minDate":"2017-08-24 22:08:58.0"},{"number":"22418344742097","maxDate":"2017-08-24 18:08:56.0","minDate":"2017-08-24 18:08:56.0"}],"number2":789},{"id":3665337,"lstImeis":[{"number":"48717031235502","maxDate":"2017-08-24 21:09:38.0","minDate":"2017-08-24 21:09:38.0"},{"number":"42540009239622","maxDate":"2017-08-24 16:35:08.0","minDate":"2017-08-24 16:35:08.0"},{"number":"42540009239644","maxDate":"2017-08-24 16:35:08.0","minDate":"2017-08-24 16:35:08.0"}],"number2":456}],"draw":0,"limit":0,"recordsFiltered":0,"recordsTotal":0}'; 
 
var response = JSON.parse(str); 
 
var tableData = response.data; 
 
var dataLength = response.data.length; 
 

 
for(i = 0; i < dataLength; i++){ 
 
\t 
 
    for(a = 0; a < tableData[i].lstImeis.length; a++){ 
 
    var obj = {}; 
 
\t obj["id"] = tableData[i].id; 
 
    obj["number"] = tableData[i].lstImeis[a].number; 
 
    obj["maxDate"] = tableData[i].lstImeis[a].maxDate; 
 
    obj["minDate"] = tableData[i].lstImeis[a].minDate; 
 
    obj["number2"] = tableData[i].number2; 
 
    data.push(obj); 
 
    } 
 
    
 
\t 
 
} 
 

 
console.log(JSON.stringify(data)); 
 

 
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

1

ごとにコードを更新しました。

var response = [{"id":3663101,"lstImeis":[{"number":"14370340908558","maxDate":"2017-08-24 22:08:58.0","minDate":"2017-08-24 22:08:58.0"},{"number":"22418344742097","maxDate":"2017-08-24 18:08:56.0","minDate":"2017-08-24 18:08:56.0"}],"number2":789},{"id":3665337,"lstImeis":[{"number":"48717031235502","maxDate":"2017-08-24 21:09:38.0","minDate":"2017-08-24 21:09:38.0"},{"number":"42540009239622","maxDate":"2017-08-24 16:35:08.0","minDate":"2017-08-24 16:35:08.0"},{"number":"42540009239644","maxDate":"2017-08-24 16:35:08.0","minDate":"2017-08-24 16:35:08.0"}],"number2":456}]; 
 

 
var result = response.reduce(function(res, obj) { 
 
    var temp = obj.lstImeis.map(function(o) { 
 
    return Object.assign({}, o, {id: obj.id, number2: obj.number2}); 
 
    }); 
 
    return res.concat(temp); 
 
},[]) 
 

 
var output = {data: result}; 
 
console.log(JSON.stringify(output));

関連する問題