2016-03-01 73 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

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