2016-09-07 6 views
-2

私は、以下の構造を持つJSONファイルがあります。は、JSONと、配列に基づいてJSONデータを準備する - JavaScriptの

{ ShippingDate: '06.09.2016', 
    'Order ID': 200003946, 
    ID: 751, 
    Product: 'Mobile Phone'}, 
    { ShippingDate: '06.09.2016', 
    'Order ID': 200003946, 
    ID: 751, 
    Product: 'TV'}, 
    { ShippingDate: '06.09.2016', 
    'Order ID': 200003946, 
    ID: 751, 
    Product: 'Batteries'}, 
    { ShippingDate: '06.09.2016', 
    'Order ID': 200003926, 
    ID: 752, 
    Product: 'Car'}, 

をだから、最初の3つのエントリが同じ顧客のオーダーです。 4番目は別の顧客の注文です。

私はhandlebars.jsテンプレートを使用して、注文に含まれるアイテムを含む各注文のhtmlファイルを作成したいと考えています。私はテンプレートのデータのようなものを準備する必要があることを、私は今問題を抱えている

<div class="header"> 
    <h1>{{ID}}</h1> 
</div> 
<div class="body"> 
    <ul> 
     {{#each Product}} 
     <li>{{this}}</li> 
     {{/each}} 
    </ul> 
</div> 

:だから私は、このテンプレートを用意しました。そしてここで私はいくつかの問題を見つけました。私のコードは次のようになります

これは機能しません。テンプレート内のproducts変数を使用してこれらの製品にアクセスできるように、アイテムの配列を準備するにはどうしたらいいですか?さらに、そのJSON文字列にIDや出荷日などの情報を追加する必要があります。データ形式は次のようになります。

var data = { 
    ShippingDate: '06.09.2016', 
    ID: '751', 
    Product: ['Mobile Phone', 'TV', 'Batteries'] 
} 

誰でもここでお手伝いできますか?ここ

+0

[アクセス/プロセス(ネストされた)オブジェクト、アレイまたはJSON]の可能な重複(http://stackoverflow.com/questions/11922383/access-process -nested-objects-arrays-or-json) – Liam

答えて

1

はそれを行うための方法である:

var data = [{ 
    "ShippingDate": "06.09.2016", 
    "Order ID": 200003946, 
    "ID": 751, 
    "Product": "Mobile Phone" 
}, { 
    "ShippingDate": "06.09.2016", 
    "Order ID": 200003946, 
    "ID": 751, 
    "Product": "TV" 
}, { 
    "ShippingDate": "06.09.2016", 
    "Order ID": 200003946, 
    "ID": 751, 
    "Product": "Batteries" 
}, { 
    "ShippingDate": "06.09.2016", 
    "Order ID": 200003926, 
    "ID": 752, 
    "Product": "Car" 
}]; 

var newData = {}; 

data.forEach(function(item) { 
    if (typeof newData[item.ID] === 'undefined') { 
     newData[item.ID] = { 
      ShippingDate: item.ShippingDate, 
      ID: item.ID, 
      Product: [] 
     }; 
    } 

    newData[item.ID].Product.push(item.Product); 
}); 

newData = Object.values(newData); 
+0

ありがとう@vincenth - JavaScriptの例もありますか? – Torben

+0

@Torben、私は私の答えを更新し、jsの例を追加しました。 – vincenth

+0

ありがとうございます。これは私を前進させます。しかし、1つの質問。私はあなたと同じように実装しました。結果は次のとおり { '200003908' {ShippingDate:'06 .09.2016' ID:200003946、 製品: [ '携帯電話' 'TV' 'バッテリー']}} IDの最初のレベルがなくなり、結果は次のようになります: {配送日:'06 .09.2016 '、 ID:200003946、 製品: ['携帯電話 '、 'テレビ'、 '電池 ']} 私が探しているものです。おかげさまでありがとうございました。私の脳は凍りついています。/ – Torben

関連する問題