Search code examples
javascriptjqueryjsonwebstringify

Stringify a multi-dimension array with javascript


Im creating an invoice for books, and aim to submit it via ajax. Im trying to json encode the array of books in the invoice, however I keep getting a blank value

 //create item list
    var order_items = [];
    $('#mi_books tbody tr.userbooks').each(function(index)
    {
        var bookisbn = $(this).find('td .mi_isbn').text();

        var bookdata = [];
        bookdata['isbn'] = bookisbn;
        bookdata['title'] = $(this).find('.mi_title').text();
        bookdata['qty'] = $(this).find('.mi_qty').text();
        bookdata['price'] = $(this).find('.mi_price').text();

        order_items.push(bookdata);

    });
    alert(JSON.stringify(order_items));
    alert(order_items.toString());
    console.log(order_items);

alert(JSON.stringify(order_items));
Outputs: [[]]

alert(order_items.toString());
Outputs: blank

console.log(order_items);
Output:

Array[1]
0: Array[0]
isbn: "9781401216672"
length: 0
price: "1007"
qty: "1"
title: "Batman: The Killing Joke"
__proto__: Array[0]
length: 1
__proto__: Array[0]

My array is being created, but somehow I cant seem to json encode it? Am I doing something wrong?


Solution

  • you may try

    var order_items = {};
    $('#mi_books tbody tr.userbooks').each(function(index)
    {
        var bookisbn = $(this).find('td .mi_isbn').text();
    
        var bookdata = {
          'isbn': bookisbn,
          'title': $(this).find('.mi_title').text(),
          'qty': $(this).find('.mi_qty').text(),
          'price': $(this).find('.mi_price').text()
        };
        order_items[index] = bookdata;
    });
    alert(JSON.stringify(order_items));
    

    your only mistake was a try to create associative arrays instead of using objects, that can do it