在javascript中更改JSON格式

时间:2016-03-01 10:38:10

标签: javascript jquery json

我最近开发了一种接受这种格式的json数据的休息服务

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

但是我的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));

1 个答案:

答案 0 :(得分: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格式。发送一个包含在一个对象中的每个项目的数组更有意义,参数是它的名称和数量,如下所示:

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