基于JSON和数组准备JSON数据 - JavaScript

时间:2016-09-07 21:02:30

标签: javascript json

我有一个具有以下结构的JSON文件:

{ 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'},

所以前三个条目是同一个客户的订单。第四个是另一个客户的订单。

我知道想使用handlebars.js模板创建一个html文件,其中包含订单所包含的每个订单。所以我准备了这个模板:

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

我现在遇到了问题,我需要为模板准备这种数据。在这里我偶然发现了一些问题。我的代码就像这样

...
var f = fs.readFileSync('data.json').toString();
var lines = JSON.parse(f);
var items = [];
//prepare products of one customer and put them into an array
for (var key in lines) {

  var line = lines[key];
  var nextLine = lines[(parseInt(key)+1)];

  if (nextLine !== undefined && line !== undefined) {
    if (line['Order ID'] !== nextLine['Order ID']) {
        items.push('Product: ' + line.Product);
    }//if   
  }//if
}//for

var data = lines;
fs.readFile(template.html, 'utf-8', function(error, source){
  var template = handlebars.compile(source);
  var html = template(data);
  console.log(html)
});

这不起作用 - 如何准备我的项目数组,以便我可以在模板中使用products变量访问这些产品?另外,我需要将ID和Shipping Date等信息添加到该json字符串中。数据格式必须如下所示:

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

任何人都可以在这里帮忙吗?

1 个答案:

答案 0 :(得分: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);