2017-01-19 19 views
0

ようこそ、JSONファイルに問題があります。私はそれを繰り返し、すべての状態を配列にしたいと思いますが、私は立ち往生しました。このファイルを読み込んで解析します。その後、私はforEachを使用しようとしましたが、うまく機能しませんでした。手伝ってくれてありがとう!JSONを複数のレベルで反復処理する方法は?

[{ 
    "offers": [{ 
    "advertiser_api_id": 12, 
    "status": 1 
    }, { 
    "advertiser_api_id": 13, 
    "status": 0 
    }] 
}] 
+0

新しい配列にすべてのステータス値を抽出しますか?上の例では '[1、0]'を得るでしょうか? – Giladd

+0

プリティファクターでJSONをフォーマットすると、構造がより明確になることがよくあります。それはここで助けになるでしょう – qxz

+0

あなたは反復する必要があるいくつのレベルですか? –

答えて

0

これは、オブジェクトをループし、コンソールにデータを印刷する - あなたはおそらくをループするために、正しい配列に達しありませんでした。

var data = [{ 
    "offers": [{ 
    "advertiser_api_id": 12, 
    "status": 1 
     }, { 
    "advertiser_api_id": 13, 
    "status": 0 
    }] 
}]; 

data[0].offers.forEach(function(element) { 
    console.log(element.status); 
}); 
+0

あなたはそうです、私は十分に深く配列しませんでした。ありがとう、あなたのコードが働いた:) – Ioo

1

私はこれがjavascriptであると仮定します。あなたは次のことを試すことができます。

for (x in json[0].offers) { 
    console.log(json[0].offers[x].status); 
} 
+2

jsonは配列内にjsonでないので、彼は 'json [0] .offers'でxに対してする必要がありますか? –

+0

@PatrickMurphyああ、あなたは正しい、私の答えを編集しました。 – bugscoder

0

これは、あなたがアレイ内のオブジェクトの配列を持っている

statuses = [] 
JSON.parse(data)[0].offers.forEach(x => statuses.push(x.status)) 
1

動作します。

まず、JSON.parse(data);を使用してJSONからオブジェクトにデータを解析する必要があります。その後、オブジェクトoffersにアクセスしてください。 parsedData[0].offersオブジェクトを使用して、配列を反復処理してステータスを取得します。

var data = `[{ 
 
    "offers": [{ 
 
    "advertiser_api_id": 12, 
 
    "status": 1 
 
    }, { 
 
    "advertiser_api_id": 13, 
 
    "status": 0 
 
    }] 
 
}]`; 
 

 
var parsedData = JSON.parse(data); 
 
var result = []; 
 
parsedData[0].offers.forEach((currentValue) => result.push(currentValue["status"])); 
 
console.log(result)

+0

実際には、配列(オブジェクトの)_オブジェクトのinside_配列内 – qxz

+0

はい、それは正しいです。 – Agalo

1

あなたはmap機能を使用することができます

var data = [{ 
 
    "offers": [{ 
 
    "advertiser_api_id": 12, 
 
    "status": 1 
 
    }, { 
 
    "advertiser_api_id": 13, 
 
    "status": 0 
 
    }] 
 
}] 
 

 
var stats = data[0].offers.map(function(item) { 
 
    return item.status; 
 
}) 
 

 
console.log(stats);

0

再帰的なアプローチを

 var item = [{ 
     "offers": [{ 
     "advertiser_api_id": 12, 
     "status": 1 
     }, { 
     "advertiser_api_id": 13, 
     "status": 0 
     }] 
    }]; 

    var statusArray = []; 
    function getStatusForALlLevels(item){ 
    if(item.offers instanceof Array){ 
    for(var i=0;i<item.offers.length;i++){ 
     getStatusForALlLevels(item.offers[i]); 
     } 
    }else{ 
     statusArray.push(item.status); 
    } 
    } 
    getStatusForALlLevels(item[0]); 
    console.log(statusArray); 
0

複数のネストされたオブジェクトからstatusを取得するには、反復および再帰的アプローチを使用できます。

var data = [{ offers: [{ advertiser_api_id: 12, status: 1 }, { advertiser_api_ii: 13, status: 0 }] }], 
 
    status = data.reduce(function iter(r, o) { 
 
     if ('status' in o) { 
 
      r.push(o.status); 
 
     } 
 
     Object.keys(o).forEach(function (k) { 
 
      if (Array.isArray(o[k])) { 
 
       r = o[k].reduce(iter, r); 
 
      } 
 
     }); 
 
     return r; 
 
    }, []); 
 

 
console.log(status);

関連する問題