2016-03-01 67 views
1

我最近开发出以这种格式变化JSON格式在JavaScript

{ 
    "foods": "food1, food2, food3", 
    "qty": "1,2,3" 
} 

接受JSON数据的其他服务,但我的javascript产生这种格式

["food1","1","food2","2","food3","3"] 

我写我的休息PHP

数据来源于本机构体

<tbody id="tr"> 
    <tr> 
     <td class="data">food1</td> 
     <td class="data">1</td> 
     <td> 
      <div class="col-sm-1"> 
       <button type="button" class="btn btn-danger removethisfood">-</button> 
      </div> 
     </td> 
    </tr> 
    <tr> 
     <td class="data">food1</td> 
     <td class="data">1</td> 
     <td> 
      <div class="col-sm-1"> 
       <button type="button" class="btn btn-danger removethisfood">-</button> 
      </div> 
     </td> 
    </tr> 
    <tr> 
     <td class="data">food1</td> 
     <td class="data">1</td> 
     <td> 
      <div class="col-sm-1"> 
       <button type="button" class="btn btn-danger removethisfood">-</button> 
      </div> 
     </td> 
    </tr> 
</tbody> 

我的Java脚本代码

var tbl = $('#tr').map(function() { 
    return $(this).find('td.data').map(function() { 
     return $(this).html(); 
    }).get(); 
    }).get(); 
    console.log(JSON.stringify(tbl)); 

回答

0

可以实现通过循环每tr并添加相关td的文本到一个数组中,通过加入阵列的文联建设的最终目标之前所要求的格式,是这样的:

var foods = [], qty = [];   
$('tr').each(function() { 
    var $row = $(this); 
    foods.push($row.find('td:eq(0)').text()); 
    qty.push($row.find('td:eq(1)').text()); 
}) 

var obj = { 
    foods: foods.join(','), 
    qty: qty.join(',') 
}; 

这就是说,你的JSON格式可以为清晰起见,系列化/ deserialisation的simplicty得到改善。它将使更多的意义与包含在与参数是它的名称和数量,这样一个对象的每个项目发出的数组:

var obj = $('tr').map(function() { 
    var $row = $(this); 
    return { 
     food: $row.find('td:eq(0)').text(), 
     qty: $row.find('td:eq(1)').text() 
    } 
}).get() 

然后,这个输出是这样的:

[{ 
    "food": "food1",  
    "qty": "1" 
},{ 
    "food": "food2", 
    "qty": "1" 
},{ 
    "food": "food3", 
    "qty": "1" 
}] 

Working example

+0

它的工作原理,但只有第一个'tr' –

+0

你能展示一个你正在使用的代码的例子。正如你从我的小提琴看到的那样,它应该可以正常工作。 –

+0

感谢它的魅力。现在我把它用在我所有的桌子上。 –