使用JavaScript将多维数组转换为字符串

5

我正在创建一份图书发票,并希望通过ajax提交。我试图对发票中的图书数组进行json编码,但是始终得到空白值。

 //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));
输出:[[]]

alert(order_items.toString());
输出:空白

console.log(order_items);
输出:

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]

我的数组已经被创建了,但是我无法将其编码为json?我做错了什么吗?

3个回答

4

ArrayObject是不同的实体。你的bookdata不是一个数组,而是一个对象,因此你应该用以下方式创建它:

var bookdata = {};


为了提高可读性,可以使用 bookdata.isbn = ... 进行赋值,而不是使用方括号和字符串(根据 ES5 规范的定义,这两种方式是相同的)。 - user1046334
请参考下面@Jack的答案,您可以将创建空{}与填充它结合起来,就像他展示的那样(我也会这样做,作为第二步;我已经修复了即时错误)。 - user1046334
谢谢您的解释,我以为bookdata也是一个数组,因为console.log输出显示它是“array”。 - pinkpixycoder
@pinkpixycoder 是的,它是一个数组,你创建了这样一个数组:[]。变量将保存你放入其中的内容,空数组 [],空对象 {} 或其他任何内容。 - user1046334

3

JSON.stringify() 方法序列化数组与普通对象的方式不同(只序列化 UInt32 类型的属性),所以当您只向 bookdata 添加文本属性时,应该使用匿名对象的方式:

var bookdata = {
    isbn: bookisbn,
    title: $(this).find('.mi_title').text(),
    qty: $(this).find('.mi_qty').text(),
    price: $(this).find('.mi_price').text()
};

0

你可以尝试一下

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));

你唯一的错误是尝试创建关联数组而不是使用可以实现它的对象


只是告诉我为什么你要给我点“踩”的评价。 - vladkras
你的代码完美运行!谢谢!我猜测你的帖子被踩是因为我问了“我做错了什么”,而不是因为代码本身 :) - pinkpixycoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接