Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将html表转换为json所需格式_Javascript_Jquery_Json - Fatal编程技术网

Javascript 如何将html表转换为json所需格式

Javascript 如何将html表转换为json所需格式,javascript,jquery,json,Javascript,Jquery,Json,我有一个html表,我想将它转换成json格式,但我没有正确地得到它 根据我的格式,生成的json不符合我的格式 这是我的桌子 <table class="table" id="example-table"> <thead> <tr> <th>Product Name</th> <th>Price</th> <th>Quantit

我有一个
html
表,我想将它转换成
json
格式,但我没有正确地得到它

根据我的
格式,
生成的
json
不符合我的
格式

这是我的桌子

<table class="table" id="example-table">
   <thead>
      <tr>
         <th>Product Name</th>
         <th>Price</th>
         <th>Quantity</th>
         <th>Amount</th>
      </tr>
   </thead>
   <tbody>
      <tr class="allTheQuotationRow">
         <td>flex board</td>
         <td contenteditable="" class="priceChangeField">3</td>
         <td contenteditable="" class="quantityChangeField">5</td>
         <td>15</td>
      </tr>
      <tr class="allTheQuotationRow">
         <td>sign board</td>
         <td contenteditable="" class="priceChangeField">20</td>
         <td contenteditable="" class="quantityChangeField">1</td>
         <td>20</td>
      </tr>
      <tr class="allTheQuotationRow">
         <td>flex board</td>
         <td contenteditable="" class="priceChangeField">30</td>
         <td contenteditable="" class="quantityChangeField">1</td>
         <td>30</td>
      </tr>
      <tr class="allTheQuotationRow">
         <td>sign board</td>
         <td contenteditable="" class="priceChangeField">200</td>
         <td contenteditable="" class="quantityChangeField">19</td>
         <td>3800</td>
      </tr>
      <tr id="lastTotalRow">
         <td>total</td>
         <td></td>
         <td></td>
         <td>3865</td>
      </tr>
   </tbody>
</table>
这是我的JSFIDLE:


请帮我提前谢谢

使用
querySelectorAll
Array.from
迭代行(内联注释)

演示

var allRows=Array.from(document.queryselectoral(“tbody tr:not(:last child)”)//获取除最后一行之外的所有行
var-map={};
allRows.forEach(函数(行){
变量单元格=行。子项;
var prodName=单元格[0]。innerText;//按产品名称索引
map[prodName]=map[prodName]| |[];//初始化内部数组
映射[prodName]。推送({//将每行推送到相应产品名称的索引
价格:单元格[1]。innerText,
数量:单元格[2]。innerText,
金额:单元格[3]。innerText
});
});
控制台日志(map)

品名
价格
量
数量
挠性板
3.
5.
15
标志牌
20
1.
20
挠性板
30
1.
30
标志牌
200
19
3800
全部的
3865

使用
queryselectoral
Array.from
迭代行(内联注释)

演示

var allRows=Array.from(document.queryselectoral(“tbody tr:not(:last child)”)//获取除最后一行之外的所有行
var-map={};
allRows.forEach(函数(行){
变量单元格=行。子项;
var prodName=单元格[0]。innerText;//按产品名称索引
map[prodName]=map[prodName]| |[];//初始化内部数组
映射[prodName]。推送({//将每行推送到相应产品名称的索引
价格:单元格[1]。innerText,
数量:单元格[2]。innerText,
金额:单元格[3]。innerText
});
});
控制台日志(map)

品名
价格
量
数量
挠性板
3.
5.
15
标志牌
20
1.
20
挠性板
30
1.
30
标志牌
200
19
3800
全部的
3865

您可以使用
reduce
数组
转换为所需的
对象

$('#convert-table').click(function() {
  var table = $('#example-table').tableToJSON();
  var result = table.reduce(function(acc, item) {
    var key = item["Product Name"].replace(/ /g, "_");
    if (!acc[key]) {
      acc[key] = []
    }
    acc[key].push({
      Price: item.Price,
      Quantity: item.Quantity,
      Amount: item.Amount
    })
    return acc;
  }, {});
  console.log(result);
});

jsiddle Link:

您可以使用
reduce
数组
转换为所需的
对象

$('#convert-table').click(function() {
  var table = $('#example-table').tableToJSON();
  var result = table.reduce(function(acc, item) {
    var key = item["Product Name"].replace(/ /g, "_");
    if (!acc[key]) {
      acc[key] = []
    }
    acc[key].push({
      Price: item.Price,
      Quantity: item.Quantity,
      Amount: item.Amount
    })
    return acc;
  }, {});
  console.log(result);
});

jsiddle Link:

重构这样的数组可能是一个复杂的过程,但谢天谢地,有一个名为lodash的库,它有一个名为groupBy的函数。它可以在一行代码中解决您的问题!
\uu.groupBy(表,“产品名称”)

真的是这样!


重构这样的数组可能是一个复杂的过程,但幸好有一个名为lodash的库,它有一个名为groupBy的函数。它可以在一行代码中解决您的问题!
\uu.groupBy(表,“产品名称”)

真的是这样!


您可以使用相同的tableToJSON数据对象生成自定义格式,如下所示

 var jsondata={};
  table.forEach( function( data ){  
  var prodName = data["Product Name"];
  jsondata[ prodName ] = jsondata[ prodName ] ?jsondata[ prodName ]: [];  
  jsondata[ prodName ].push({   
     Price : data['Price'],
     Quantity : data['Quantity'],
     Amount : data['Amount']
  });
});
console.log(JSON.stringify(jsondata)); 

您可以使用相同的tableToJSON数据对象生成自定义格式,如下所示

 var jsondata={};
  table.forEach( function( data ){  
  var prodName = data["Product Name"];
  jsondata[ prodName ] = jsondata[ prodName ] ?jsondata[ prodName ]: [];  
  jsondata[ prodName ].push({   
     Price : data['Price'],
     Quantity : data['Quantity'],
     Amount : data['Amount']
  });
});
console.log(JSON.stringify(jsondata));